字符串"sizeof"的意外结果

sca*_*man 3 c c++ sizeof

为什么在以下情况下sizeof会打印不同的值:

printf("%d",sizeof("ab")); //print 3

char* t="ab";
printf("%d",sizeof(t)); //print 4
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,我有2个字符...不应该sizeof打印2?因为它们是2个字节?

N 1*_*1.1 7

C中的字符串为空终止.

记忆中的"ab"看起来像 'a' 'b' '\0'

虽然t是一个指针,所以大小是4.


Jam*_*lis 7

t是指向包含的数组的指针"ab".它的大小是指针的大小.

"ab"是一个包含的数组"ab".它的大小是该数组的大小,它是三个字符,因为你必须考虑null终止符.

数组不是指针.