admin 管理员组文章数量: 1087139
2024年4月21日发(作者:指向函数的指针怎么用)
sizeof一维数组和二维数组
1. sizeof的说明
sizeof在C语言里面属于操作符,不属于函数,和变量的++,--属于同样的操作符。
sizeof后面的括号里面,可以放类型名,数组名等内存大小确定的类型,不能计算函数名,
可变数组的内存大小等
2. sizeof计算一维数组
首先,看如下代码:
#include
int main()
{
int a[]={1,2,3,4};
/*打印内存地址*/
printf("0x%x, 0x%x, 0x%x, 0x%xn",a,&a,a+0,&a[0]);
/*计算内存大小*/
printf("%d, %d, %d, %dn",sizeof(a),sizeof(&a),sizeof(a+0),sizeof(&a[0]));
return 0;
}
我们知道,a代表数组的起始地址,也就是数组a的0号位元素的内存起始地址,a+0
代表指针a偏移0,因此指向的还是数组的起始地址,所以a=&a=a+0=&a[0],虽然他们
的数值相等,都表示数组起始地址,但他们的意义不同。
数组名a代表数组起始地址,如果它参与指针偏移运算,那么它就代表一个指向某一
位元素的指针(看本文章最后的总结,数组名参与偏移运算,退化为指针),例如a+0代
表指向数组0号位元素的指针,因此它的内存大小为4。数组元素a[0]和*(a+0)表示的意
义相同,访问a[0],就是从数组首地址开始偏移0,然后再访问内存中的数值,所以,&a[0]
就是&(*(a+0)),&和*抵消,为a+0,代表指向数组0号位元素的指针,内存大小为4。
经过上面的分析,就可以理解代码的运行结果,已经在windows XP,vc6.0下编译链
接过:
3. sizeof计算二维数组
首先,看如下代码:
版权声明:本文标题:sizeof一维数组和二维数组 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1713663552a645968.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论