C和C++有许多不同之处,并非所有有效的C代码都是有效的C++代码.
("有效"是指具有已定义行为的标准代码,即不是特定于实现/未定义/等.)
在使用每种语言的标准编译器编译时,是否有任何一种在C和C++中都有效的代码会产生不同的行为?
为了使它成为一个合理/有用的比较(我试图学习一些实用的东西,而不是试图在问题中找到明显的漏洞),让我们假设:
#ifdef __cplusplus,pragma等) 在C++中sizeof('a') == sizeof(char) == 1.这具有直观意义,因为它'a'是一个字符文字,并且sizeof(char) == 1由标准定义.
然而,在C中sizeof('a') == sizeof(int).也就是说,看起来C字符文字实际上是整数.有谁知道为什么?我可以找到很多关于这个C怪癖的提及,但没有解释为什么它存在.
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch='a';
printf("sizeof(ch) = %d\n", sizeof(ch));
printf("sizeof('a') = %d\n", sizeof('a'));
printf("sizeof('a'+'b'+'C') = %d\n", sizeof('a'+'b'+'C'));
printf("sizeof(\"a\") = %d\n", sizeof("a"));
}
Run Code Online (Sandbox Code Playgroud)
该程序用于sizeof计算大小.为什么尺寸'a'不同于ch(哪里ch='a')?
sizeof(ch) = 1
sizeof('a') = 4
sizeof('a'+'b'+'C') = 4
sizeof("a") = 2
Run Code Online (Sandbox Code Playgroud) 我试过了
printf("%d, %d\n", sizeof(char), sizeof('c'));
得到1,4作为输出.如果一个角色的大小是一个,为什么'c'给我4?我想这是因为它是一个整数.所以,当我这样做时,是否会char ch = 'c';发生隐式转换,在它被分配给char变量时,从4字节值到1字节值?
printf("%lu \n", sizeof(*"327"));
Run Code Online (Sandbox Code Playgroud)
我一直认为指针的大小在64位系统上是8个字节但是这个调用一直在返回1.有人可以提供解释吗?
可能重复:
C/C++中的字符大小('a')
以下程序
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('\0'));
printf("%d\n", sizeof(0));
}
Run Code Online (Sandbox Code Playgroud)
用gcc输出编译
4
4
Run Code Online (Sandbox Code Playgroud)
和g ++
1
4
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是原因是什么?
#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么在C和C++中编译时上面的代码会产生不同的结果?在C中,它打印4,而在C++中,它是更可接受的答案,即1.
当我用size函数中声明的char变量替换sizeof()内的'a'时,结果在两种情况下都是1!
我编写了一个小的printf语句,它在C和C++中的工作方式不同:
int i;
printf ("%d %d %d %d %d \n", sizeof(i), sizeof('A'), sizeof(sizeof('A')), sizeof(float), sizeof(3.14));
Run Code Online (Sandbox Code Playgroud)
使用gcc编译器在c中的上述程序的输出是4 4 8 4 8
使用g ++编译器在c ++中上述程序的输出是4 1 8 4 8
我预计c中有4 1 4 4 8.但结果并非如此.
printf sizeof中的第三个参数(sizeof('A'))给出8
任何人都可以给我这个推理
char a, b;
printf("%d", sizeof(a+b));
Run Code Online (Sandbox Code Playgroud)
printf写入屏幕的内容是什么?
我认为因为sizeof(char)= 1,sizeof(a + b)也将是1,但结果是4.我不明白这一点,如果我们添加两个字符,为什么写4?
在 x86_64 架构上,一个指针是 8 个字节。对我来说sizeof(x)应该返回 8是有意义的。我知道 achar是单个字节,而 5 个字节是 array 的大小z。为什么sizeof(z)不返回8背后的直觉是什么?
int* x = new int[10];
char z[5];
// Returns 8
std::cout << "This is the size of x: " << sizeof(x) << std::endl;
// Returns 5
std::cout << "This is the size of z: " << sizeof(z) << std::endl;
Run Code Online (Sandbox Code Playgroud)