C中sizeof与char a []和char * a有什么区别? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C中sizeof与char a []和char * a有什么区别? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

#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 [] =“爱你!”它有10个字符,末尾有一个不可见的'\ 0'。

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

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

答案

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

char a[] = "Love you!"只是char a[10] = "Love you!"的语法糖。它创建一个变量,它是一个由char类型的十个对象组成的数组。所以sizeof a会给你10个chars的大小。

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

以上是关于C中sizeof与char a []和char * a有什么区别? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中sizeof的用法

字符与字符串3——char 的大小

C - memset vs free

c语言求数组长度strlen

C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size

char、int、long它们各占几个字节?占几位?