【C语言进阶】数组名和指针使用sizeof有什么不同?
本文介绍一个比较常见的错误,是跟sizeof有关的,不知你是否有掌握呢?
1 问题说明
大家都知道在C语言中,我们会使用sizeof来求一个变量的实际内存长度,那么如果是对数组名求sizeof,以及对一个指针求sizeof,它的结果有何不一样呢?
2 示例代码
为此,简单写了一段测试代码:
#include
int main(int argc, const char *argv[])
{
int a[10];
int *p = &a;
printf("sizeof(a) = %d\\n", sizeof(a));
printf("sizeof(p) = %d\\n", sizeof(p));
return 0;
}
3 代码解读
代码其实很简单,先是定义了一个10个元素的整型数组,然后定义了一个指向整型类型的指针,并将指针指向数组a。
随后对a和p,分别使用sizeof来求大小。
我们来看一下运行结果:

从运行结果,我们可以知道,两者是完全不一样的。
sizeof(a),是求a数组的内存大小,理论上应该等于:10 乘以 一个整形数所占空间 = 40 字节;
而如果对指针p求sizeof,它用于等于运行机器上的指针大小,比如在32位机器上,这个值就是4字节;而我的测试机器是64位机器,所以其值为8字节。
4 总结
sizeof求数组和指针是两个不同的操作,对数组它是求数组的整体内存大小,而对指针,其值用于等于机器的字长(即不同的机器有不同的测试结果)。
这个易犯错的知识点,你get到了吗?
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7646浏览量
146189 -
编程
+关注
关注
90文章
3724浏览量
97453 -
指针
+关注
关注
1文章
484浏览量
71969 -
数组
+关注
关注
1文章
420浏览量
27474 -
sizeof
+关注
关注
0文章
9浏览量
6624
发布评论请先 登录
相关推荐
热点推荐
C语言入门教学之数组资料总结免费下载
本文档的主要内容详细介绍的是C语言入门教学之数组资料总结免费下载主要内容包括了:1 一维数组的定义和一维数组元素的引用2 一维
发表于 10-23 17:53
•5次下载
C语言中指针与数组
#define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址*int p,temp;//可直接初始化定义指针
发表于 01-13 13:11
•3次下载
C语言数组元素的指针
C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。
由于数组名代表的是
C++数组名和数组拷贝详解
C++数组间赋值不能直接通过数组名称 randy = sesame进行,因为数组名并不是指针,大部分情况下,编译器会隐式转换为指向
发表于 08-21 15:09
•937次阅读
数组与指针不能混用的情况
和指针的基本概念。数组是一组相同类型的元素的集合,而指针是一个变量,它存储了一个地址,该地址指向内存中的某个位置。在 C/C++ 中,
【C语言进阶】数组名和指针使用sizeof有什么不同?
评论