标签: sizeof

为什么C字符文字而不是字符?

在C++中sizeof('a') == sizeof(char) == 1.这具有直观意义,因为它'a'是一个字符文字,并且sizeof(char) == 1由标准定义.

然而,在C中sizeof('a') == sizeof(int).也就是说,看起来C字符文字实际上是整数.有谁知道为什么?我可以找到很多关于这个C怪癖的提及,但没有解释为什么它存在.

c c++ sizeof char

101
推荐指数
7
解决办法
2万
查看次数

为什么数组参数的大小与main中的大小不同?

为什么作为参数发送的数组的大小与main中的相同?

#include <stdio.h>

void PrintSize(int p_someArray[10]);

int main () {
    int myArray[10];
    printf("%d\n", sizeof(myArray)); /* As expected, 40 */
    PrintSize(myArray);/* Prints 4, not 40 */
}

void PrintSize(int p_someArray[10]){
    printf("%d\n", sizeof(p_someArray));
}
Run Code Online (Sandbox Code Playgroud)

c arrays function sizeof

101
推荐指数
7
解决办法
7万
查看次数

C中的单个结构成员的sizeof

我试图声明一个依赖于另一个结构的结构.我想用来sizeof保证安全/迂腐.

typedef struct _parent
{
  float calc ;
  char text[255] ;
  int used ;
} parent_t ;
Run Code Online (Sandbox Code Playgroud)

现在我想声明一个child_t大小相同的结构parent_t.text.

我怎样才能做到这一点?(下面的伪代码.)

typedef struct _child
{
  char flag ;
  char text[sizeof(parent_t.text)] ;
  int used ;
} child_t ;
Run Code Online (Sandbox Code Playgroud)

我试着用几种不同的方法parent_tstruct _parent,但我的编译器不接受.

作为一个技巧,这似乎工作:

parent_t* dummy ;
typedef struct _child
{
  char flag ;
  char text[sizeof(dummy->text)] ;
  int used ;
} child_t ;
Run Code Online (Sandbox Code Playgroud)

是否可以在child_t不使用的情况下声明dummy

c struct sizeof

101
推荐指数
8
解决办法
5万
查看次数

为什么sizeof int是错误的,而sizeof(int)是对的?

我们知道这sizeof是一个用于计算任何数据类型和表达式大小的运算符,当操作数是表达式时,括号可以省略.

int main()
{
        int a;

        sizeof int;
        sizeof( int );
        sizeof a;
        sizeof( a );

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

第一次使用sizeof是错误的,而其他人则是对的.

当使用gcc编译时,将给出以下错误消息:

main.c:5:9: error: expected expression before ‘int’
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么C标准不允许这种操作.会不会sizeof int引起任何歧义?

c c++ sizeof

96
推荐指数
3
解决办法
6675
查看次数

有机器,sizeof(char)!= 1,或者至少CHAR_BIT> 8?

有机器(或编译器),在哪里sizeof(char) != 1

C99标准是否说sizeof(char)标准合规性实施必须正好1?如果有,请给我部分编号和引文.

更新: 如果我有一台机器(CPU),它不能寻址字节(最小读取是4个字节,对齐),但只有4-s的字节(uint32_t),这个机器的编译器可以定义sizeof(char)为4吗? sizeof(char)将是1,但char将有32位(CHAR_BIT宏)

Update2: 但是sizeof结果不是BYTES!这是CHAR的大小.char可以是2个字节,或者(可能是)7位?

Update3: 好的.所有机器都有sizeof(char) == 1.但机器有CHAR_BIT > 8什么?

c standards sizeof c99 char

90
推荐指数
3
解决办法
2万
查看次数

为什么lambda的大小为1个字节?

我正在处理C++中一些lambda的记忆,但我对它们的大小感到有些困惑.

这是我的测试代码:

#include <iostream>
#include <string>

int main()
{
  auto f = [](){ return 17; };
  std::cout << f() << std::endl;
  std::cout << &f << std::endl;
  std::cout << sizeof(f) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里运行它:http://fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598

ouptut是:

17
0x7d90ba8f626f
1
Run Code Online (Sandbox Code Playgroud)

这表明我的lambda的大小是1.

  • 这怎么可能?

  • lambda至少应该是指向它的实现的指针吗?

c++ lambda sizeof c++11 c++14

89
推荐指数
5
解决办法
7348
查看次数

为什么C中函数的大小总是1个字节?

当我们检查函数的大小时sizeof(),我们总是得到1个字节.这个1字节表示什么?

c size function sizeof

87
推荐指数
4
解决办法
5902
查看次数

为什么sizeof被认为是运营商?

为什么被sizeof认为是操作员而不是功能?

有资格成为运营商需要什么财产?

c operators sizeof

86
推荐指数
4
解决办法
2万
查看次数

这个结构如何具有sizeof == 0?

有一个旧帖子要求一个sizeof可以返回的构造0.高信誉用户有一些高分答案说,按标准,没有类型或变量可以有0的大小.我同意100%.

然而,这个新的答案提出了这个解决方案:

struct ZeroMemory {
    int *a[0];
};
Run Code Online (Sandbox Code Playgroud)

我正要进行投票和评论,但是在这里度过的时间教会我检查我100%肯定的事情.所以...让我惊讶的是,gccclang显示出相同的结果:sizeof(ZeroMemory) == 0.更重要的是,变量的大小是0:

ZeroMemory z{};
static_assert(sizeof(z) == 0); // Awkward...
Run Code Online (Sandbox Code Playgroud)

Whaaaat ...?

Godbolt链接

这怎么可能?

c++ sizeof language-lawyer

78
推荐指数
4
解决办法
5114
查看次数

为什么(以及何时)我需要在sizeof之后使用括号?

以下无法编译:

typedef int arr[10];
int main(void) {
    return sizeof arr;
}

sizeof.c:3: error: expected expression before ‘arr’
Run Code Online (Sandbox Code Playgroud)

但如果我改成它

sizeof(arr);
Run Code Online (Sandbox Code Playgroud)

一切都好.为什么?

c sizeof

74
推荐指数
2
解决办法
1万
查看次数

标签 统计

sizeof ×10

c ×8

c++ ×4

char ×2

function ×2

arrays ×1

c++11 ×1

c++14 ×1

c99 ×1

lambda ×1

language-lawyer ×1

operators ×1

size ×1

standards ×1

struct ×1