指向字符串的指针大小和字符串大小的差异

Difference in size of a pointer to a string, and sizeof a a string

本文关键字:字符串 指针      更新时间:2023-10-16

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

#include<stdio.h>
int main()   
{    
char *str1="abcd";  
char str2[]="abcd";  
printf("%d %d %dn",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

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

你从哪里得到str2"理想情况下就像一个指向字符串的指针"的想法?事实并非如此。CCD_ 11是一个数组。当运算符sizeof应用于数组时,它返回数组对象的大小(以字节为单位)。

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

p.S.%d不是打印sizeof结果的合适格式说明符。%d需要int参数,而sizeof生成size_t值。使用%zu打印size_t类型的值。