|
5鱼币
为什么都是元素首字母的地址,打印的结果却完全不同呢?
- #include <stdio.h>
- main(void)
- {
- int a[3][4] = {1, 2, 3, 4};
- printf("%d\n", *(&a[0][0] + 2));
- printf("%d\n", *(&a + 2));
- return 0;
- }
复制代码
本帖最后由 桃花飞舞 于 2022-9-21 14:14 编辑
- #include <stdio.h>
- main(void)
- {
- int a[3][4] = {1, 2, 3, 4};
- printf("%d\n", *(&a[0][0] + 2));
- printf("%d\n", *(&a + 2));
- return 0;
- }
复制代码
printf("%d\n", *(&a[0][0] + 2)); //&a[0][0] + 2是首元素的地址+2 也就是a[0] + 0 + 2从0号元素偏移两个元素就是3
printf("%d\n", *(&a + 2)); //数组名a表示数组类型的变量,a代表整个数组,&a自然指向整个数组的指针,&a是数组指针,是int(*)[3][4]类型,如果&a+2它会便宜两个二维数组
//这里的*(&a+2) 看着是指针类型但是分析下来它是数组
|
最佳答案
查看完整内容
printf("%d\n", *(&a[0][0] + 2)); //&a[0][0] + 2是首元素的地址+2 也就是a[0] + 0 + 2从0号元素偏移两个元素就是3
printf("%d\n", *(&a + 2)); //数组名a表示数组类型的变量,a代表整个数组,&a自然指向整个数组的指针,&a是数组指针,是int(*)[3][4]类型,如果&a+2它会便宜两个二维数组
//这里的*(&a+2) 看着是指针类型但是分析下来它是数组
|