一、指向数组元素的指针变量的定义和赋值
数组指针 是指 数组的开始地址,数组元素的指针 就是数组元素的地址
- int a[5]; //能引用的是:a[0]-a[4],只要是数组,那么数组元素的内存一定是挨着的。
- a[0]=5; //数组名 a的地址 就等于 a[0]的地址;数组名代表数组的首地址。
- a[1]=6;
- a[2]=7;
- a[3]=8;
- a[4]=9;
- int *p; //指针变量,整形指针变量,和数组a类型相同。
- p=&a[0]; // 把a[0]元素的地址赋给指针变量p,即p指向数组第0号元素;这里等价于 p=a;
- #include
- int main()
- {
- int a[5];
- int *p;
- int i;
- a[0]=12;
- a[1]=14;
- a[2]=20;
- a[3]=18;
- a[4]=50;
-
-
- for(i=0;i<5;i++)
- {
- printf("%d\n",a[i]);
- }
- printf("-----------------------------\n");
- for(i=0;i<5;i++)
- {
- printf("%d\n",*(a+i));
- }
- printf("-----------------------------\n");
- for(p=a;p<(a+5);p++) //p 指向 a(数组首地址),指针变量p小于地址(a+5),指针变量p ++
- {
- printf("%d\n",*p); //p 的地址不同,*p指向的变量也不一样。每次都取p存的地址的值
- }
- }
注意事项:
(a) 数组首地址 a,不可以进行 a++;
(b) p可以指向数组元素以外的内存地址,但是不可以使用这个地址,因为不属于你,你不能操作。
(6) *p++
优先级相同,并且都是从右到左的结合性,所以 *(p++)
p++是先用后加,所以*(p++)整个作用是:得到p 指向的变量的值(*p),然后再使p指针自加1,指向下一个数组元素。
- 以进行 a++;
- (b) p可以指向数组元素以外的内存地址,但是不可以使用这个地址,因为不属于你,你不能操作。
-
- (6) *p++
- 优先级相同,并且都是从右到左的结合性,所以 *(p++)
- p++是先用后加,所以*(p++)整个作用是:得到p 指向的变量的值(*p),然后再使p指针自加1,指向下一个数组元素。
-
-
-
- #include
- int main()
- {
- int a[5];
- int *p;
-
-
- a[0]=12;
- a[1]=14;
- a[2]=20;
- a[3]=18;
- a[4]=50;
- p=a;
- printf("%d\n",*p++); //因为先用后加,先输出 a[0]的值12,然后p指向了a[1]
- printf("%d\n",*p); //因为上面p++了,所以得到的结果就是:a[1]的值。14
-
- }
(7) *++p //这里和上面使完全不同的,因为++p是先加后用;先p+1,然后再取用p指向的变量。
printf("%d\n",*++p); //先打印a[1]的值14,然后p指向了a[1]
(8) (*p)++ //表示p所指向的元素加1,如果p指向的数组首地址,那么就等价于 a[0]++,实际上就是数组元素值+1,不是指针加一。