指向字符串的指针大小和字符串大小的差异
Difference in size of a pointer to a string, and sizeof a a string
可能重复:
关于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
类型的值。
相关文章:
- strcpy 在类中无法使用字符串指针
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 使用conststd::字符串指针作为函数参数
- 将字符串指针传递到C++和Xcode 11.1中不同线程上运行的函数
- OOP 和字符串指针的奇怪行为
- 在 C++ 中通过字符串指针复制字符串变量中的字符串
- 删除字符串指针在struct中的内存
- 字符串指针的排序向量
- C#C /CLR处理REF参数和字符串指针
- 问题在字符串指针中存储单词
- 如何在C++中从字符串指针中获取字符
- 如何使用字符串指针访问映射的键
- 将字符串指针与 NULL 以及 NULL 字符进行比较的目的
- 如何获取字符串指针的值?
- C++ 字符串* 指针未在控制台中正确打印
- Visual Studio C++ 空字符串指针
- 管理C#中返回的字符串指针
- 指向C++中的字符串指针数组的指针
- 如何将结果集设置为字符串指针
- 如何初始化字符串指针