首页 > 试题广场 >

下列代码的输出是?

[单选题]
在32位机器中,如下代码:
void example(char acWelcome[]){
    printf("%d", sizeof(acWelcome));
    return;
}
void main(){
    char acWelcome[] = "Welcome to Huawei Test";
    example(acWelcome);
    return;
}
的输出是?
  • 0
  • 4
  • 23
  • 24
推荐
这题的正确答案应该是32位系统是4 64位系统是8,数组作为函数的参数是会退化为函数指针的,想想看,数组作为函数参数的时候经常是需要传递数组大小的
编辑于 2015-01-26 20:03:45 回复(28)
void example(char acWelcome[]) {
	printf("%d", sizeof(acWelcome));
	return;
}
int main() {
	char acWelcome[] = "Welcome to Huawei Test";
	example(acWelcome);
	printf("\n%d\n", sizeof(acWelcome));
	return 0;
}

发表于 2016-02-21 19:28:14 回复(8)
char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。

上面是对静态数组处理的结果,如果是对指针,结果就不一样了

char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是

长整型的,所以是4
sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类

型的,占了 1 位

strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen
发表于 2019-04-01 22:36:02 回复(6)
此处为一个指针变量。32位系统的指针变量是一个int,也就是4个字节

若在函数体内,char a[5]="oo";
则sizeof代表数组大小,注意是声明范围的大小 
发表于 2015-05-12 21:04:45 回复(2)
当数组当作参数传递时,它就退化成指针了,要求数组长度的话,可以在main函数内部求得
详解见   http://www.cnblogs.com/Lynn-Zhang/p/5383201.html
编辑于 2016-09-15 16:09:41 回复(0)
数组作为函数的参数传参时,数组名会退化为指针,数值传参时,需要把数值的长度一起传过去,另外,sizeof()运算符包含字符串的哨兵'/0',而strlen()函数不包含哨兵

发表于 2017-09-30 20:58:02 回复(0)
发表于 2016-10-04 13:13:17 回复(0)
选择B:
将数组名作为函数的参数传递给函数的时候,此时的函数名退化为了指针,在32位的机器上指针位4个字节
发表于 2015-09-11 22:52:32 回复(0)
数组名作实参,调用函数时把数组的首地址传递给形参。此时,计算sizeof(数组名),计算的是地址的大小,即4
发表于 2017-04-18 11:10:08 回复(0)
当传数组作为参数的的时候,传递的时候会转换成指针,所以当传数组为参数时,要注明长度
发表于 2015-08-15 21:19:39 回复(0)
发表于 2020-05-21 18:29:06 回复(1)
我试过了,,不管你传什么字符串过去 结果输出都是4
发表于 2015-04-28 20:59:44 回复(2)
数组作为函数的参数将变成指针类型,将指针传入时,即是求指针的sizeof。对于32位操作系统来说,指针大小是4个字节。对于64位操作系统而言,指针大小是8个字节。
发表于 2022-09-23 02:51:30 回复(0)
char  arr[]="0123456789"
// char数组会留出最后一个\0字符的位置
sizeof(arr) = 11
strlen(arr)=10

如果传参(char* arr)或者 (char arr[]), 则
sizeof(arr) = 4(32位机器)|8(64位机器)
输出的指针的所占空间大小
编辑于 2020-05-24 10:31:57 回复(0)
数组作为函数参数会退化,退化为指针。对于32位操作系统来说,指针大小是4个字节。对于64位操作系统而言,指针大小是8个字节。
发表于 2018-10-15 12:05:55 回复(0)
数组作为函数的参数将变成指针类型,将指针传入时,即是求指针的sizeof。32位系统的指针是一个int,4个字节。
发表于 2016-10-09 20:58:56 回复(0)
是4 因为编译器会把函数中的数组优化为指针
发表于 2015-10-09 13:18:04 回复(0)

指针占用的内存空间大小与指向的数据类型无关,它是固定的,取决于系统的位数。

指针本质上是一个存储内存地址的变量,它指向某个数据的内存位置。无论指针指向的是 、、 还是其他数据类型,指针本身的大小都是相同的。charintfloat

指针的大小与系统的位数相关,通常在 32 位系统上占据 4 字节的空间,而在 64 位系统上占据 8 字节的空间。这是因为 32 位系统使用 32 位的寻址空间,而 64 位系统使用 64 位的寻址空间,因此指针的大小也相应增加。

需要注意的是,不同类型的指针可以指向不同类型的数据,但它们占据的内存空间大小仍然是相同的。指针的类型决定了编译器在解引用指针时应该采取的操作,以正确地处理指向的数据类型。但是,无论指针指向的是什么类型的数据,指针本身的大小是固定的

发表于 2023-07-21 11:21:38 回复(0)
发表于 2022-06-27 15:34:35 回复(1)
sizeof()表示分配的存储空间,sizelen()是字符串或数组长度。指针变量占四个字节。
发表于 2020-12-28 22:23:30 回复(0)
数组名作为参数传入数组时候会退化成指针,因此求数组长度大小一般要在传入子函数之前。
发表于 2019-03-23 10:54:56 回复(1)