SizeOf函数返回的字符数组
void main()
{
char s[]="\12345s\n";
printf("%d",sizeof(s));
}
的工作当我编译它,它给6.我不是占有,为什么它给6 insted的8。 像{'\1','2','3','4','5','s','\n'}
SizeOf函数返回的字符数组
请有谁能够告诉其原因,我想要一些深刻而清晰的解释。我会感谢他们。
因为\123
被认为是一个字符,所以它是一个转义序列(八进制)。所以sizeof
计算5个字符'\123'
,'4'
,'5'
,'s'
,'\n'
和结尾'\0'
。
不会给它4无论如何它的思考指针不管字符串是什么? – Dineshkumar
@Dineshkumar char *和char []之间有区别,这里's'是一个数组,所以'sizeof'返回数组的大小。在阵列衰减成指针的情况下,例如,传递给函数'foo(char * p)'sizeof'将返回4(或指针通常具有的任何大小 - 取决于操作系统) –
char s[]="\12345s\n"
等于:
char s[] = { '\123', '4', '5', 's', '\n', 0 }
所以六个总元件。
char s[]="\12345s\n";
\
表示转义序列 如果号码用于高达3个地方,缺省为八进制。 所以\ 123将在八进制作为 进行评估 - > 8 * 8 * 1 + 8 * 2 + 3 = 83 所以如果打印这个你会发现它 S45s 为S - >对应的ASCII码的83 因此,大小也是4.
尝试打印's',然后你应该看看发生了什么。 –
在printf调用中有UB:格式指定了一个int,但sizeof提供了一个size_t。 – pmg
[sizeof数组和指针]可能的重复(http://stackoverflow.com/questions/13672162/sizeof-array-and-pointers) –