数组名与&数组名

数组名是数组首地址吗?

char str[3][5] = {     {'h','e','l','l','o'},

                               {'w','o','r','l','d'},

                               {'y','y','y','y','\0'}  };

//.二维数组列表初始化的字符串数组没加‘\0’的话就只是字符数组

 printf("str为%p,%s\n",str,str);

 printf("str为%p,%s\n",&str[0][0],&str[0][0]);

 printf("&str为%p,%s\n",&str,&str);

//%s是打印字符串到/0结束

//三者完全相同,说明地址值:str==&str[0][0]==&str为数组的首元素地址

printf("str为%p,%c\n",str,*str);

printf("str为%p,%c\n",&str[0][0],str[0][0]);

printf("&str为%p,%c\n",&str,*(&str));

//发现用%c打印数组首元素,理论上&str[0][0]与str完全等价,但这里str[0][0]可以正确打印,而*str不行。说明它们之间是有区别的。

printf("str为%p,%c\n",str,**str);

printf("str为%p,%c\n",&str[0][0],str[0][0]);

printf("&str为%p,%c\n",&str,***(&str));

//str[0][0]与**str打印结果相同,说明str在这里是表示整个数组的地址,而不是数组首地址。

再看一个例子

//会有警告:传参类型不匹配,说明数组指针的值类型应该是整个数组的地址,而不是数组首地址

结论

整个数组的地址&a与数组元素首地址a在地址值上是相同的,但表达含义并不同。

理论上数组名一般都表示数组元素首地址,但有几种情况表整个数组的地址

1.数组定义   2.&a     3.sizeof     4.%c...其他情况

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值