c - 为什么字符串数组中的 "Hello"的大小为 4?

标签 c string pointers sizeof

有问题的代码:

#include <stdio.h>

int main(void) {

 char *a[10] = {"hi", "Hello", "how"};
 printf("%d\n", sizeof(a));

 printf("%s\n%s\n%s\n", a[0],a[1],a[2]);
 printf("%d\n%d\n%d\n", sizeof(a[0]),sizeof(a[1]),sizeof(a[2]));

 printf("%d", sizeof("Hello"));
 return 0;
}

输出:

40
hi
Hello
how
4
4
4
6

我不知道为什么会这样,我还在 cppreference 上查找了 sizeof 的引用资料| .仍然不知道为什么它在应该需要 6 来存储它时为“Hello”返回 4。

最佳答案

它实际上打印指针的大小而不是字符串内容本身。看所有大小都打印为 4 个字节。

关于c - 为什么字符串数组中的 "Hello"的大小为 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30548536/

相关文章:

c - 如果我只为单个 int 分配 4 个字节,那么指针如何存储第二个 int?

c - "softlink between 2 pointers in C"这可能吗,在字符串排序中需要这个

c - 将字符数组传递给指针并连接字符串

c - 没有条件运算符的最大数

c - tcp(内核)旁路是如何实现的?

c - 在进程之间分配几乎均等的任务

c - 为什么第二个代码出现段错误?

c - 解析多个文件时错误的 lex 状态

在 C 中创建一百万(或更多)字符串数组

c - realloc() 用于 C 中结构指针