关于指针的一些疑惑
以前我以为指针里存放的就是地址,例如int * p = &a;(a是一个整形变量)。变量p中存放的就是a的地址,在输出的时候前面加上*号,就表示输出这个地址里的内容。但是在看到指向二维数组的指针的时候,我这个想法完全就错了,例如有个整形数组a[3][4],数组名a就是地址了,a+1表示第1行首元素的地址,但是输出时前加*的意义却不是输出这个地址中存放的元素,而是又输出了这个元素的地址,这点让我非常困惑,就是说a+1和*(a+1)表示的含义是完全相同的
程序代码:
#include <stdio.h> int main(void) { int a[3][4] = { {1, 4, 2, 8}, {6, 4, 7,2}, {2, 3, 6, 4} }; printf("%d \n", a + 1); //1 printf("%d \n", *(a + 1)); //2 printf("%d \n", (a + 1)[0]); //3 printf("%d \n", (a + 1)[0][0]); //4 printf("%d \n", *(a + 1)[0]); //5 return 0; }
1>C:\Users\94497\source\repos\实验\源.cpp(10,9): warning C4477: “printf”: 格式字符串“%d”需要类型“int”的参数,但可变参数 1 拥有了类型“int (*)[4]” //1 1>C:\Users\94497\source\repos\实验\源.cpp(11,9): warning C4477: “printf”: 格式字符串“%d”需要类型“int”的参数,但可变参数 1 拥有了类型“int *” //2
11991476 1
11991476 2
11991476 3
6 4
6 5
C:\Users\94497\source\repos\实验\Debug\实验.exe (进程 4552)已退出,返回代码为: 0。
按任意键关闭此窗口...