关于 一个SIZEOF的有关问题


关于 一个SIZEOF的问题
如果定义函数 
void func(char str[200])
{
  printf("%d\n",sizeof(str));
}
请问输出为什么是4,而不是200


c语言 基本概念 程序开发

二小姐的小缝儿 11 years, 11 months ago


数组名和指针有很多相似之处,当用数组做为函数参数时,数组名会弱化成变量指针,详细可以参考《C语言参考手册》第五版,里面对数组名的弱化介绍的很详细.

浣熊的毛尾巴 answered 11 years, 11 months ago


str是指针啊,肯定是4啊,这个问题面试的时候问到过好几次。,

碎月葬影233 answered 11 years, 11 months ago


形参其实是一个地址,即指针类型。所以,在编译器为32位的环境里,sizeof的指针类型值都是4.

iear07 answered 11 years, 11 months ago


数组做形参 会退化成常量指针。

func(char str[20]) == func(const char *str)

Xiayuhe answered 11 years, 11 months ago


  C/C++ code

  void func(char str[200]);//很有欺骗性的申明

cainlee answered 11 years, 11 months ago


数组作为函数参数时,退化为指针

up + 1

rockini answered 11 years, 11 months ago


void test(char str[200])
{
printf("%d\n",sizeof(str)); ====> 4
}


int main(int argc, char *argv[])

{
char str[200] = {0};

printf("%d\n",sizeof(str)); =====> 200
test(str);

}

数组作为函数参数时,退化为指针

梯子不用要横放 answered 11 years, 11 months ago


数组作为函数参数时,退化为指针

ck一支竹 answered 11 years, 11 months ago


数组作为函数参数等价于指向数组首元素的常量指针,你写200还是2000都一样没意义
指针大小为4

dislsr answered 11 years, 11 months ago

Your Answer