c - C中sizeof计算char a[]和char *a有什么区别?

标签 c pointers char

<分区>

#include <stdio.h>
int main(void)
{

    char a[] = "Love you!";
    char *b = "Love you!";

    printf("%s\n", a); 
    printf("Length: %d\n", sizeof(a));

    printf("%s\n", b); 
    printf("Length: %d\n", sizeof(b));

    return 0;
}

看上面的代码。

这是输出:

Love you!
Length: 10
Love you!
Length: 8

我理解 char a[] = "Love you!" 它有 10 个字符,末尾有一个不可见的 '\0'。

我没有得到的是 char *b 的长度只有 8,而其中的字符可以完美打印。

C中sizeof计算char a[]和char *a有什么区别?

最佳答案

数组和指针是不同的东西。

char a[] = "Love you!" 只是 char a[10] = "Love you!" 的语法糖。它创建一个变量,它是一个包含十个 char 类型对象的数组。所以 sizeof a 将为您提供 10 个 char 的大小。

char *b = "Love you!" 创建一个变量,它是一个指针,并使其指向字符串文字的第一个字符 "Love you!"。所以 sizeof b 会给你一个指向 char 的指针的大小。

关于c - C中sizeof计算char a[]和char *a有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213851/

相关文章:

python - 通过 ctypes 将 Unicode 字符串传递给 printf

java - 将 int 转换为 char 然后再转换回 int - 并不总是给出相同的结果

c++ - 读取和写入 USACO 文件

C语言——Malloc无限空间?

c - 行列式程序无法正常工作

c - 指针访问方法比数组索引更快吗?

c - C 中的 2 D 字符数组,其中每个值都是 C 字符串

android - 一种从字符串中删除特定字符的方法? ( Kotlin )

java - 查找字符串匹配位置?

c++ - 为具有内存限制的大 XML 优化的 XML 库