返回信息流如下简单代码
#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有什么区别呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #97947同步于 2018/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】C语言sizeof问题
dongqing
2018/7/28镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
为什么在main中的sizeof不是指针?
【 在 jiarong 的大作中提到: 】
: testSizeOf传进来的是一个指针,sizeof求得指针的大小
题主的问题我专门查过,sizeof在编译的时候,编译器会把括号参数变换成所属类型,所以,main里面编译过后就是一块内存大小,而testsizeof里面的sizeof编译会把括号里面的arr变成char* 对于指针变量的大小根据系统不一样来决定的,所以test实际输出的是char*这种数据类型的大小,我这样说不知道说明白没
嗯嗯,多谢
【 在 w2017111695 的大作中提到: 】
: 题主的问题我专门查过,sizeof在编译的时候,编译器会把括号参数变换成所属类型,所以,main里面编译过后就是一块内存大小,而testsizeof里面的sizeof编译会把括号里面的arr变成char* 对于指针变量的大小根据系统不一样来决定的,所以test实际输出的是char*这种数据类型的大小,我这样说不知道说明白没