如何声明一个指向字符指针的二维数组的指针。喜欢
char *ar[10][10];
根据我的理解,这个数组存储为数组的数组,因此 ar 指向一个指针数组,每个指针都指向该数组中的一列。所以它有三层指针。所以应该声明为
char ***p;
因此 ar
和 p
属于同一类型。
但是如果我像二维数组一样使用 p
,例如p[0][0]
,它给出了段错误。为什么会发生这种情况以及声明 p
的正确方法是什么?
最佳答案
声明看起来像这样
char * ar[10][10];
char * ( *p_ar )[10][10] = &ar;
例如在 sizeof
运算符中取消引用指针,您将获得数组的大小,因为表达式的类型为 char[10][10]
printf( "%zu\n", sizeof( *p_ar ) );
输出将等于100
例如,要使用指针输出原始数组第一行的第一个字符串,您可以编写
printf( "%s\n", ( *p_ar )[0][0] );
要使用指针输出原始数组第一行的第一个字符串的第一个字符,您可以编写
printf( "%c\n", ( *p_ar )[0][0][0] );
或
printf( "%c\n", *( *p_ar )[0][0] );
您还可以声明一个指向数组第一个元素的指针
char * ar[10][10];
char * ( *p_ar )[10] = ar;
在这种情况下,使用您可以编写的指针输出原始数组第一行的第一个字符串
printf( "%s\n", p_ar[0][0] );
要使用指针输出原始数组第一行的第一个字符串的第一个字符,您可以编写
printf( "%c\n", p_ar[0][0][0] );
或
printf( "%c\n", *p_ar[0][0] );
关于c - 指向二维指针数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39272677/