c - 指向二维指针数组的指针

标签 c arrays pointers

如何声明一个指向字符指针的二维数组的指针。喜欢

char *ar[10][10]; 

根据我的理解,这个数组存储为数组的数组,因此 ar 指向一个指针数组,每个指针都指向该数组中的一列。所以它有三层指针。所以应该声明为

char ***p; 

因此 arp 属于同一类型。 但是如果我像二维数组一样使用 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/

相关文章:

c - 向 Xcode 添加头文件

c - 经典 c 中的 float* varname 和 float *varname 有什么区别

arrays - Excel-根据分数的投票制作数组

c++ - 使用bool函数在c++中进行递归二进制搜索

c++ - C/C++中的主题挖掘算法

c - Windows API 的哪些部分不能从 ANSI C 代码访问?

javascript - 具有重复条目的数组问题

JavaScript嵌套数组过滤问题

c++ - 使用指向类成员和结构成员的指针之间的差异

c++ - const char[] 和 const char* 的区别