有关C语言的,请问int *p[3]和int(*p)[3]的区别,请大侠帮忙解释!

2024-11-28 13:27:37
推荐回答(1个)
回答(1):

前者是指针数组,包含3个元素,后者是一个数组型指针。
区别一是:一个是3个元芹迟素汪察的数组,相当于定义了三个变量;一个是单个变量。
区别二 是:前者变量类型困首茄是int*,后者变量类型是int (*)[3],int*指针的步长是一个int,而int (*)[3]指针步长是3个int。
int *p = new int[3];
int nAddress0 = (int)&p[0]; // 取p[0]的地址
int nAddress1 = (int)&p[1]; // 取p[1]的地址

cout << nAddress1 - nAddress0 << endl; // 输出是4,即一个int长度

int pp[3][3];
int (*q)[3] = &pp[0];
int nAddress0 = (int)q; // 取q[0]的地址
int nAddress1 = (int)(q +1); // 取q[1]的地址
cout << nAddress1 - nAddress0 << endl; // 输出是12,即3个int长度