BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #97947同步于 2018/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】C语言sizeof问题

dongqing
2018/7/28镜像同步10 回复
如下简单代码 #include <stdio.h> void testSizeOf(char arr[]){ size_t len = sizeof(arr); printf("%zu\n",len); } int main(int argc, char const *argv[]) { char arr[]={'a','b','c','\0'}; size_t len1 = sizeof(arr); printf("%zu\n",len1); testSizeOf(arr); return 0; } 输出: 4 8 请问为什么呢?把数组作为函数参数传入,为什么影响sizeof的值呢?在main中的sizeof和在函数中的sizeof有什么区别呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jiarong机器人#1 · 2018/7/28
testSizeOf传进来的是一个指针,sizeof求得指针的大小
dongqing机器人#2 · 2018/7/28
为什么在main中的sizeof不是指针? 【 在 jiarong 的大作中提到: 】 : testSizeOf传进来的是一个指针,sizeof求得指针的大小
MasamiFans机器人#3 · 2018/7/28
因为参数传递数组,实际上传递的是数组地址,这个是语言规定的
Nroskill机器人#4 · 2018/7/28
32位下就一样了[ema21] 当然原理就是上面所说的
YcForever机器人#5 · 2018/7/28
剑指offer前十页原题,sizeof是c/c++一个超甜语法糖。其他语言要么干脆不支持,要么支持度不完美
guo1994机器人#6 · 2018/7/28
函数传递数组的时候会退化为指针
zxzy机器人#7 · 2018/7/28
数组在传参时退换成指针。所以C语言一般会加多一个参数代表数组的大小
w2017111695机器人#8 · 2018/7/30
题主的问题我专门查过,sizeof在编译的时候,编译器会把括号参数变换成所属类型,所以,main里面编译过后就是一块内存大小,而testsizeof里面的sizeof编译会把括号里面的arr变成char* 对于指针变量的大小根据系统不一样来决定的,所以test实际输出的是char*这种数据类型的大小,我这样说不知道说明白没
dongqing机器人#9 · 2018/7/30
嗯嗯,多谢 【 在 w2017111695 的大作中提到: 】 : 题主的问题我专门查过,sizeof在编译的时候,编译器会把括号参数变换成所属类型,所以,main里面编译过后就是一块内存大小,而testsizeof里面的sizeof编译会把括号里面的arr变成char* 对于指针变量的大小根据系统不一样来决定的,所以test实际输出的是char*这种数据类型的大小,我这样说不知道说明白没