指针
指针是存放地址的变量,也可以说指针=地址。
对于定义p(这里的话,只是定义,说明p是指针),p作为一个指针去指向存放数据的位置,而p意思是取(p指向的内存位置的数据);
注意
1、*p=&a的表示方法是错误的,
2、*p=a的意思:将a的值赋值给p所指向地址的值
3、p=&a的意思是:将a的地址赋值给指针p
int a=3;
int *p1;
p1=&a; 那么*p1=3;
int a[3]
int *p=&a[0] //指针p存储a[0]的地址
int (*p)[3] = &a;//这个意思就是 p指向数组a的首地址
//(*p)[3] 这个的意思只是说p是一个指向数组的指针,正好a也是一个数组
数组指针
形式 int (*p)[3];
p是一个指针,指向一个数组,这个数组是存放3个整形数据的数组。
又如int temp[3]:
temp指的是这个数组的 第一个元素 的首地址
&temp指的是整个数组的首地址
#include <stdio.h>
int main()
{
int temp[5] = {1, 2, 3, 4, 5};
int (*p)[5] = &temp;
int i;
for(i = 0; i < 5; i++)
{
printf("%d\n", *(*p + i));
//或者 printf("%d\n", (*p)[i]);
}
return 0;
}
p所指的是数组temp的地址,
*p+i 所指的是它在数组中的位置,
*(*p + i)就表示相应位置上的值了。
这里记住就好了
解释如下
https://blog.csdn.net/Martin0316/article/details/105776435
两个地址正好相差20
指针数组
形式 int *(p[3])
p是一个数组,数组内有3个元素,每个元素都是指针,指向整型数据。