关于c++中sizeof用法和数组指针问题

intarr1[]={1,2,3};//定义一个含有三个元素的数组int*source=arr1;//定义一个int指针指向arr1的第一个元素size_tsz1=siz... int arr1[]={1,2,3};//定义一个含有三个元素的数组
int *source=arr1;//定义一个int指针指向arr1的第一个元素
size_t sz1=sizeof(arr1);//sz1输出等译12
size_t sz2=sizeof(*source);//sz2等于4
为什么会这样子???求高人解释~~
展开
 我来答
迎风摇摆的树叶
推荐于2017-10-04 · TA获得超过785个赞
知道小有建树答主
回答量:400
采纳率:50%
帮助的人:234万
展开全部
sizeof(arr1),arr1是数组,arr1里面是int变量 占据4个字节,所以3个变量占据12个字节。
int *source ,source是一个指针,若是sizeof(source)之后你会发现是4 因为所有的指针都是大小为4
*source是指针所指向的元素,int类型 占据4个字节 所以等于4
追问
如果这样写size_t sz3=sizeof(*arr1);//sz3为什么又等于4呢?是因为*arr1是一个指针?我就是不理解*arr1表示的啥
追答
arr1是数组名同时也是数组首元素的地址,相当于一个指针,*是取值运算符,因此*arr1其实是数组的首元素,还是一个int变量所以结果还是4
Jseven_jy
2011-10-13 · TA获得超过8122个赞
知道大有可为答主
回答量:2499
采纳率:100%
帮助的人:1142万
展开全部
sizeof()这个函数,里面是指针,结果都为4

size_t sz1=sizeof(arr1);//sz1输出等译12
因为一个int型占4个字节,所以arr1里面有三个元素,所以是12

sizeof得到的是其在内存中占的字节数

指针是用来存放地址的,它等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4

希望能到你。。。
追问
size_t sz1=sizeof(arr1);//sz1输出等译12
里面写得是arr1,arr1不也是一个指向首元素的指针吗?
还有如果这样写size_t sz3=sizeof(*arr1);//sz3为什么又等于4呢?是因为*arr1是一个指针?
追答
数组的sizeof值等于数组所占用的内存字节数

指针都是4哦。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓝骑士之阿强
2013-12-05 · TA获得超过274个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:145万
展开全部
sizeof(数组名)求的是整个数组的大小,即元素类型的大小乘以元素个数
source是一个指针变量,其存放的是地址,而*source的值是数组arr1的首地址,32位机的地址都是4个字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yfhnb
2011-10-13
知道答主
回答量:24
采纳率:0%
帮助的人:15万
展开全部
arr1的类型是int [],是数组,你赋的值有三个int的,所以是3*4=12
*source的类型是int ,占有四个字节。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
123songmingzhu
2011-10-13 · TA获得超过309个赞
知道小有建树答主
回答量:436
采纳率:0%
帮助的人:262万
展开全部
size_t sz1=sizeof(arr1)是数组大小,但是sizeof返回不是个数,而是大小,以字节为单位。
size_t sz2=sizeof(*source);返回第一个数组值得大小。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式