c - 关于双指针和三指针/双维数组

标签 c pointers pointer-to-pointer

所以,我一直在玩 C 指针和指针算法,因为我对它们并不完全满意。我想出了这段代码。

char* a[5] = { "Hi", "My", "Name", "Is" , "Dennis"};
char** aPtr = a; // This is acceptable because 'a' is double pointer
char*** aPtr2 = &aPtr; // This is also acceptable because they are triple pointers
//char ***aPtr2 = &a // This is not acceptable according to gcc 4.8.3, why ?

//This is the rest of the code, the side notes are only for checking
printf("%s\n",a[0]); //Prints Hi
printf("%s\n",a[1]); //Prints My
printf("%s\n",a[2]); //Prints Name
printf("%s\n",a[3]); //Prints Is
printf("%s\n",a[4]); //Prints Dennis

printf("%s\n",*(a+0)); //Prints Hi
printf("%s\n",*(a+1)); //Prints My
printf("%s\n",*(a+2)); //Prints Name
printf("%s\n",*(a+3)); //Prints Is
printf("%s\n",*(a+4)); //Prints Dennis

printf("%s\n",*(*(aPtr2) +0)); //Prints Hi 
printf("%s\n",*(*(aPtr2) +1)); //Prints My // ap = a, *ap = *a, *(ap)+1 = *a+1 ?
printf("%s\n",*(*(aPtr2) +2)); //Prints Name
printf("%s\n",*(*(aPtr2) +3)); //Prints Is
printf("%s\n",*(*(aPtr2) +4)); //Prints Dennis

char*** aPtr2 = &a 根据 gcc 4.8.3 是 Not Acceptable ,为什么?

抱歉忘记添加编译器警告:

warning: initialization from incompatible pointer type [enabled by default]

可能不清楚我想说什么,所以我不得不添加这个链接:

注意注释掉的行。

最佳答案

a 是 5 个指针的缓冲区的地址并且是不可变的(即它是一个固定的指针)。如果你允许

char ***aPtr2 = &a;

然后

*aPtr2 = &a[3];

实际上会修改地址a(这是禁止的)。

关于c - 关于双指针和三指针/双维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579784/

相关文章:

c++ - 关于 C/C++ 解引用运算符

c++ - 理解c函数指针

c - 指向指针的指针和指向二维数组的指针之间的区别

c - 带有指针的嵌套结构

C 中初始化的结构成员不能用作整型常量吗?

无法以特定波特率进行通信

c - 读取整个标准输入以缓冲

c - 解析字符串并将其存储回字符数组时显示随机字节

c - printk中如何使用回车符

C:指针数组与指针到指针