首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

比如int a[2][3],为什么不能用*a来输出a[0][0]?该如何解决

2013-11-25 
比如int a[2][3],为什么不能用*a来输出a[0][0]?如图片中的问题附:#includestdio.hvoid main(){int a[2][

比如int a[2][3],为什么不能用*a来输出a[0][0]?
比如int a[2][3],为什么不能用*a来输出a[0][0]?该如何解决
如图片中的问题
附:#include<stdio.h>
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
printf("%d\n",&a[0]);        //268712
printf("%d\n",&a[0][0]);   //268712
printf("%d\n",a);           //2686712   一个地址 (都采用%d表示,方便观察。)
printf("%d\n",*a);       //2686712  一个地址?
                        //a不是代表第一行的首地址么?所以也可以说是第一行第一个元素的地址吧,
                       //上面的输出同样验证的确是这样,那为什么*a无法输出具体元素值呢?还是一个地址值?
printf("%d\n",*a[0]); //输出1 ,这样肯定是可以输出的(由上面知道&a[0][0]和a等价,
                     //那么为什么a[0][0]可以输出数据值,而*a不可以?当然**a肯定可以。)
char m[2][3]={"ab","cd"};
printf("%s\n",m);//ab
printf("%s\n",*m);//ab
}
数组 c语言 指针 地址
[解决办法]
当a是二维数组名时,a即&a[0],而*a即a[0],两者的显式的值是相同的,但是基类型是不同的。
如果定义int a[2][3];
a类型是 int (*)[3]
*a类型是 int *
这二者,显式的只都是相同的,但是意义不同
[解决办法]

引用:
Quote: 引用:

当a是二维数组名时,a即&a[0],而*a即a[0],两者的显式的值是相同的,但是基类型是不同的。
如果定义int a[2][3];
a类型是 int (*)[3]
*a类型是 int *
这二者,显式的只都是相同的,但是意义不同


如上所述 *a的类型严格来说应该是int[3]  ,a[0][0]类型是int
C/C++是强类型语言,时刻要有“类型”的观念呀

#include<stdio.h>
#include "windows.h"
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
        printf("%d",sizeof(*a));  //输出12 ,*a的类型是int[3],大小当然是12了
printf("%d",sizeof(a[0][0])); //输出4,a[0][0]的类型是int,大小就是4了
system("pause");
}

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

当a是二维数组名时,a即&a[0],而*a即a[0],两者的显式的值是相同的,但是基类型是不同的。
如果定义int a[2][3];
a类型是 int (*)[3]
*a类型是 int *
这二者,显式的只都是相同的,但是意义不同


如上所述 *a的类型严格来说应该是int[3]  ,a[0][0]类型是int
C/C++是强类型语言,时刻要有“类型”的观念呀

#include<stdio.h>
#include "windows.h"
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
        printf("%d",sizeof(*a));  //输出12 ,*a的类型是int[3],大小当然是12了
printf("%d",sizeof(a[0][0])); //输出4,a[0][0]的类型是int,大小就是4了
system("pause");
}

谢谢,明白了许多。

再回头认真的看看
c和指针这本书吧! 这几天你问的题目暴露了你的c语言基础
[解决办法]
引用:
当a是二维数组名时,a即&a[0],而*a即a[0],两者的显式的值是相同的,但是基类型是不同的。
如果定义int a[2][3];
a类型是 int (*)[3]
*a类型是 int *
这二者,显式的只都是相同的,但是意义不同


结果是对的,但推导的过程不对。

热点排行