1、double (*p)[3]:表示p为一个 一维度的double类型数组的指针,该数组包含3个元素;
#include <stdio.h> int main() { double a[3] = {1.01 ,2.02, 3.03}; //P: 指向一维数组的指针; double (*P)[3] = a; printf("%d\n", &(*P)[0]); //提取一维数组第一个元素的地址; printf("%d\n", (*P)); //数组的首地址; printf("%d\n", P); //数组的首地址; printf("\n"); printf("%f\n", (*P)[0]); printf("%f\n", *(*P)); printf("\n"); double *r = &((*P)[1]); //获取数组第2个元素的地址; printf("%f\n",*r); return 0; }
结果为:
-1708309968 -1708309968 -1708309968 1.010000 1.010000 2.020000
指向2维数组的情况:
#include <stdio.h> int main() { double a[3][3] = { {1.01 ,2.02, 3.03}, {4.04 ,5.05, 6.06}, {7.07 ,8.08, 9.09} }; //P: 指向一维数组的指针; double (*P)[3] = a; printf("&(*P)[0]=%d\n", &(*P)[0]); //提取一维数组第一个元素的地址; printf("(*P)=%d\n", (*P)); //数组的首地址; printf("P=%d\n", P); //数组的首地址; printf("\n"); printf("P[2][2]=%f\n", P[2][2]); //P指向数组的首地址; //*P:2维数组首地址,*P+1:第1行第2个元素的地址,*(*P+1):第1行的第2个元素; printf("*(*P+1)=%f\n",*(*P+1)); //*(P+1):第2行首地址,**(P+1):第2行的首个元素; printf("**(P+1)=%f\n",**(P+1)); //*(P+1):第2行元素的首地址,*(P+1)+1:第2行第2个元素的地址; printf("*(*(P+1)+1)=%f\n", *(*(P+1)+1)); // printf("\n"); printf("(*P)[1]=%f\n",(*P)[1]); //(*P)为一个指针,指向二维数组的第一行首地址;提取第一行的第2个元素; double *r = &((*P)[1]); //获取第一行第2个元素的地址; printf("*r=%f\n",*r); return 0; }
结果为:
P=94324080 P[2][2]=9.090000 *(*P+1)=2.020000 **(P+1)=4.040000 *(*(P+1)+1)=5.050000 (*P)[1]=2.020000 *r=2.020000