优先级:
方括号 “ [ ] ” 的优先级是高于指针运算符 “ * ” 的,而我们知道()这个括号是优先级中的大老大。。
指针数组:
int *p1[10]; //指针数组
1.一维数组,数组元素有10个2.数组的每个元素都是一个指向int型对象的指针。所以,p1[i]是一个int指针,而*p1[i]是指针指向的第i个文本行的首字符。当然你还是要给指针赋地址。比如:int a[10]={0}; for(i=0;i<10;i++) { p1[i]=&a[i];//给指针赋地址、、、 }
int (*p2)[10] //数组指针1. p2是这个数组的首地址,可以用两种方法(1)int a[10]={0};p2=&a;
(2)p2 = (int *)malloc(sizeof(int)* 10);
给数组指针地址。
2. (*p2)[i]可以用来表示每一个数组元素的值。
tips:我在VS下运行的,好奇地发现,#include <stdio.h> #include <stdlib.h> int *p1[10] = { 0 };//指针数组, int(*p2)[10];//数组指针 int main() { int *p; p2 = (int *)malloc(sizeof(int)* 10); //(*p2)[1] = 0; printf("&p2[1]的地址=%d\n", &p2[1] ); printf("&p2[0]=%d\np2=%d\n", &p2[0],p2); p2[1][1] = 0; printf("p2[1][1]=%d\n",p2[1][1]); printf("hello"); return 0; }
从下图可以看出地址差40,这40就是10个int所占的字节数。
加油。