9.4 数组的指针和指向数组的指针变量-1
- 一.指向数组元素的指针变量的定义和赋值
- 二.通过指针引用数组元素
- 1.情况1
- 2.情况2
- 3.情况3
- 4.情况4
- 5.情况5
- 注意事项:
- 情况6:*p++ 优先级相同,并且都是从右到左的结合性,所以 *(p++)
- 情况7: (*p)++ 表示p所指向的元素加1,如果p指向数组首地址,那么就等价于a[0]++,实际上是数组元素值+1,不是指针+1;
- 三.学习网站
一.指向数组元素的指针变量的定义和赋值
数组指针 是指 数组的开始地址,数组元素的指针就是数组元素的地址
a[3] = 6; //下标法引用数组元素,也可以用指针
int a[5]; //能引用的是a[0]-a[4];
a[0] = 5;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; //数组名代表数组的首地址
//定义指针变量时也可以给指针变量赋予初值
int *p = &a[0];
int *p;
p = &a[0]; // *p = &a[0];
int *P = a;
二.通过指针引用数组元素
1.情况1
*P =19; //a[0] = 19;
2.情况2
p = p +1; //增加了4,比如原来p = 1000, p = p +1后 p= 1004;
3.情况3
p =i 或者 a+i (i是数组元素的下标 0-4)
假如现在p指向数组首地址,a是数组名(代表数组首地址),那么p+i或者a+i就是数组元素a[i]的地址,也就是说,它们指向了数组a的第i个元素。
也就是说 p+3,和 a+3的值, &a[3],也就是都指向a[3], a+ 3*4 = 1012
结论:p+i 或者a+i,都是地址。既然是地址,就可以赋给指针变量。
*P = 19; //a[0]
p = a +3;
*p = 13; //a[3]
4.情况4
(p+i) 或者 (a +i)
有了情况3,自然知道情况4,这两个是p+i或a+i所指向的数组元素,也就是a[i],比如(p+2) 或者(a+2)就是a[2];
*(p+3) = 18; //相当于a[3] =18;
*(p+2) = 190; //相当于a[2] =190;
5.情况5
p[i] (i是数组元素的下标0-4)
p[i]与 *(p+i) 等价,也就是跟a[i]等价
p[3] = 156; //等价于a[3] = 156
引用数组元素有很多方法:
a[i] ; p[i]; *(p+i); *(a+i);
演示实例:
int a[5]; //能引用的是a[0]-a[4];
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 ++) //直接操作内存,效率最高
{
printf("%d\n",*p);
}
注意事项:
1.a++不可用
2.*a[5] 按照 *(a+5)
p++:优先级相同,并且都是从右到左的结合,所以(p++)
情况6:*p++ 优先级相同,并且都是从右到左的结合性,所以 *(p++)
p++是先用后加,所以*(p++)整个作用是:得到p指向的变量的值(*p),然后再使p指针自加1,指向下一个数组元素;
int a[5]; //能引用的是a[0]-a[4];
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]的值,然后p指向了a[1];
printf("%d\n",*++p); //打印a[1]的值,然后p指向了a[1];
情况7: (*p)++ 表示p所指向的元素加1,如果p指向数组首地址,那么就等价于a[0]++,实际上是数组元素值+1,不是指针+1;
(*P)++; //相当于a[0]++;
p++;
(*p)++; //相当于a[1]++;
p–; //又指回&a[0]
(*p) = 789; //a[0] = 789;
三.学习网站
整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记