在 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) #include <stdio.h>
#include <string.h>
main()
{
printf("%d \n ",sizeof(' '));
printf("%d ",sizeof(""));
}
Run Code Online (Sandbox Code Playgroud)
输出:
4
1
Run Code Online (Sandbox Code Playgroud)
为什么o/p为第一个printf而来4,而且如果我给它''它显示错误为错误:空字符常量但是双引号空白即没有任何空格是没有错误没有错误?
可能重复:
C/C++中的字符大小('a')
我是C的初学者,对此感到困惑.
C: 我尝试使用"%zu"修饰符在C中打印sizeof('a'),然后输出值4.
C++: 使用cout在C++中打印sizeof('a'),printf(使用上面的格式)都打印了值1.
我认为正确的值应该是1,因为'a'将被视为char.为什么不在C中返回4?这两种语言的操作规模是否都不同?如果是这样,有什么区别,为什么它会返回不同的值?我在两种情况下都使用了gcc编译器.
为什么以下程序4的输出?
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('3'));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在C中,以下代码:
#include<stdio.h>
int main()
{
char c='a';
printf("%d %d",sizeof(c),sizeof('a'));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生结果1和4?请解释逻辑?
另外,为什么会sizeof(main())导致4但sizeof(main)导致1:
#include<stdio.h>
int main()
{
printf("%d %d\n",sizeof(main), sizeof(main()));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在C++中为什么会sizeof('a')导致1而sizeof('av')导致4?
我知道C和C++中的每个文字都会获得特定的类型信息.我在C中编写了这个小程序,并在Visual Studio 2012中对其进行了编译.源文件名为'main.c'.
#include <stdio.h>
int main()
{
printf("sizeof(char) = %d\n",sizeof(char));
printf("sizeof('i') = %d",sizeof('i'));
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
sizeof(char) = 1
sizeof('i') = 4
Run Code Online (Sandbox Code Playgroud)
我想知道角色的大小不是1字节.我将源文件重命名为'main.cpp',现在sizeof('a')返回1,如前所述.所以必须有语言特定的差异.为什么C 4字节中的字符大小而不是1?
比较指向'\0'合法的指针?
关于clang ++的主干版本(25836be2c)
const char *a = "foo";
if(a == '\0')
Run Code Online (Sandbox Code Playgroud)
给出一个错误:指针和整数之间的比较('const char*'和'int')
而
if(a == 0)
Run Code Online (Sandbox Code Playgroud)
没有按预期给出任何错误.
用于与指针进行比较的空指针是否等效于空指针?这是编译器错误吗?
另一点是,此错误未显示"-std = c ++ 03"标志,但显示"-std = c ++ 11"标志.但是,当我使用g ++(v4.8.5)时,我没有在这两个标准中得到错误
我曾尝试通过谷歌和这样的研究,但我只能找到结果为sizeof('a')它的类型int,因此应该给我4个字节,但是当我运行此我得到1个字节(我想可能是因为我的链接是一个参考对于C而不是C++).然而,这里有趣的是,当我键入时,sizeof('aa')我得到4个字节.而且aa(例如aaa或aaaa)之后的任何字符仍然给我4个字节.为什么随着更多字符的增加,3个字节突然增加并保持不变?另外为什么sizeof(int)在这里给我1个字节?
谢谢!
可能重复:
C/C++中的字符大小('a')
有人可以解释为什么在C sizeof(char)= 1和sizeof(name[0])= 1但sizeof('a')= 4?
name[0] 在这种情况下将是 char name[1] = {'a'};
我试过通过C的文档阅读以获得这个,但我根本就没有得到它!如果sizeof('a')和sizeof(name[0])都是4,我会得到它,如果他们都是1,这将使感......但我不明白的差异!
可能重复:
C/C++中的字符大小('a')
为什么这个程序输出4而不是1?
void main()
{
printf("%d",int(sizeof('z')));
}
Run Code Online (Sandbox Code Playgroud)
'z'是一个字符,sizeof('z')必须打印1?
使用Berkeley套接字api时,通过read/send或write/recv调用发送的内容的数据类型是什么?例如 -
char *msg = "Our Message!";
int len, bytes_sent;
len = strlen(msg);
bytes_sent = send(sockfd, msg, len, 0);
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我们使用char类型,但是我们仅限于char类型,因为send/write/sendto通常采用void *类型.我也看到了一些参数,比如我们发送一些int,它实际上可能存储在little endian/big endian中,如果它们的endianess不匹配,会导致b/w source/dest出现问题.那么为什么不char输入这个问题呢?
另外C和C++等不同的语言也有不同的大小char,为什么这不是一个问题呢?如果socket不关心任何type内容并且只是将内容视为缓冲区,那么当不同的tcp服务器/客户端用不同的语言编写并相互通信时,为什么我们不会看到数据的随机损坏?
简而言之,我可以通过套接字安全地发送什么值(类型)?
我正在努力 sizeof()
当我输入参数为char数据类型时
J=sizeof(char);
Run Code Online (Sandbox Code Playgroud)
它输出为1.
但是当我进入这样的论点时
J=sizeof('A');
Run Code Online (Sandbox Code Playgroud)
我输出为4.
由于它的参数是char数据类型,它应该返回1作为输出,为什么它返回4/2(取决于32位/ 64位设备).
何时使用%s而不是%c.例如:
#include <stdio.h>
#include <string.h>
int main(void) {
char name[31] = "My name is Arnold";
printf(" %c \n", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我将%c更改为%s,我会得到:我的名字是Arnold,但如果将%s更改为%c,我会得到一些奇怪的东西:
?
Run Code Online (Sandbox Code Playgroud)