0

可能重复:
关于 C 中的指针和字符串的问题

#include<stdio.h>

int main()   
{    
char *str1="abcd";  
char str2[]="abcd";  
printf("%d %d %d\n",sizeof(str1),sizeof(str2),sizeof("abcd"));  
return 0;
}

为什么这段代码给出相同的答案sizeof(str2)sizeof("abcd")即使str2理想情况下就像指向字符串的指针一样str1,所以答案应该是 4 4 5

Ideone 上的代码:http: //ideone.com/za8aV

答案:4 5 5

4

2 回答 2

4

字符数组不是char指针。尽管数组在传递给函数时确实会衰减为指针,但它们本质上是不同的东西(具体来说,编译器在编译时知道它们的确切长度)。您看到 5 表示四字符字符串的原因是字符串文字char为终止零保留了一个。4另一方面,是系统相关的:在具有 32 位指针的系统上,您将看到4,而在具有 64 位指针的系统上,您将看到8

于 2012-08-29T16:50:29.590 回答
1

您从哪里得到str2“理想情况下就像指向字符串的指针”的想法?它不是。str2是一个数组。当运算符sizeof应用于数组时,它以字节为单位返回数组对象的大小。

字符串文字也是一个数组,因此当sizeof应用于字符串文字时,它会返回该数组对象的大小(以字节为单位)。因此,期望sizeof("abcd")sizeof(str2)产生相同的结果是完全自然的。他们做到了。

PS %d不是打印结果的适当格式说明符sizeof%d需要int参数,同时sizeof产生一个size_t值。用于%zu打印size_t类型的值。

于 2012-08-29T16:52:26.100 回答