标签: sizeof

为什么C-Array在传递给函数时有一个错误的sizeof()值?

完整的例子:

#include <stdio.h>

void test(int arr[]) {
    int arrSize = (int)(sizeof(arr) / sizeof(arr[0]));
    printf("%d\n", arrSize); // 2 (wrong?!)
}

int main (int argc, const char * argv[]) {
    int point[3] = {50, 30, 12};

    int arrSize = (int)(sizeof(point) / sizeof(point[0]));
    printf("%d\n", arrSize); // 3 (correct :-) )

    test(point);

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

在将它传递给函数之前,sizeof给出了正确的值.在函数中完全相同的数组上执行完全相同的操作会产生奇怪的结果.缺少一个元素.为什么?

c arrays function sizeof

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

sizeof空结构在C中为0,在C++中为1为什么?

可能重复:
C++中的空类C
中空结构的大小是多少?

我在某处看到C++中空结构的大小为1.所以我想到验证它.不幸的是我把它保存为C文件并使用了<stdio.h>标题,我很惊讶地看到了输出.这是0.

这意味着

struct Empty {

};

int main(void)
{
  printf("%d",(int)sizeof(Empty));
}
Run Code Online (Sandbox Code Playgroud)

在编译为C文件时打印0,在编译为C++文件时打印1.我想知道原因.我读到c ++中的sizeof空结构不为零,因为如果大小为0,则该类的两个对象将具有相同的地址,这是不可能的.我哪里错了?

c c++ struct sizeof

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

为什么'auto'不尊重一元减运算符?

我对C++很新,但我发现这种auto奇怪的行为:

class A{};

int main() {
    A a;
    auto x = -(sizeof(a));
    cout << x << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

unsigned在这种情况下,变量x 虽然我在变量的初始化时使用了一元减运算符.为什么只考虑sizeof(std::size_t)的返回类型而不是因为使用的运算符而存储的数字是否为负的事实?

我知道size_t是一个unsigned int.

我用GCC 8.1.0和C++ 17试过这个.

c++ unsigned sizeof

32
推荐指数
3
解决办法
2484
查看次数

是"sizeof new int;" 未定义的行为?

码:

#include<iostream>

using namespace std;

int main() 
{
    size_t i = sizeof new int;

    cout<<i;
}
Run Code Online (Sandbox Code Playgroud)

在GCC编译器中,工作正常,没有任何警告或错误和打印输出8.

但是,在clang编译器中,我收到了以下警告:

warning: expression with side effects has no effect in an unevaluated context [-Wunevaluated-expression]
    size_t i = sizeof new int;
Run Code Online (Sandbox Code Playgroud)
  • 哪一个是真的?
  • sizeof new int;未定义的行为?

c++ g++ sizeof c++11 clang++

32
推荐指数
2
解决办法
4103
查看次数

C中结构数组'sizeof'的结果?

在C中,我有一个结构数组定义如下:

struct D
{
    char *a;
    char *b;
    char *c;
};

static struct D a[] = {
    {
        "1a",
        "1b",
        "1c"
    },
    {
        "2a",
        "2b",
        "2c"
    }
};
Run Code Online (Sandbox Code Playgroud)

我想确定数组中元素的数量,但sizeof(a)返回不正确的结果:48,而不是2.我做错了什么,或者sizeof这里根本不可靠?如果重要的话我正在使用GCC 4.4进行编译.

c arrays struct sizeof

31
推荐指数
3
解决办法
6万
查看次数

sizeof如何知道操作数数组的大小?

这可能是一个愚蠢的问题,但是当你没有传入数组中的元素数量时,sizeof运算符如何知道数组操作数的大小.我知道它不会返回数组中的总元素,而是以字节为单位返回大小,但为了得到它,它仍然必须知道数组何时结束.只是好奇这是如何工作的.

c c++ sizeof

31
推荐指数
6
解决办法
2773
查看次数

为什么int在64位编译器上通常是32位?

为什么int64位编译器通常是32位?当我开始编程时,我被教过int通常与底层架构的宽度相同.我同意这也是有道理的,我发现未指定的宽度整数与底层平台一样宽是合乎逻辑的(除非我们说的是8或16位机器,这样的小范围int几乎不适用).

后来我int在大多数64位平台上学到的通常是32位.所以我想知道这是什么原因.对于存储数据,我更喜欢明确指定数据类型的宽度,因此这留下了通用用法int,这不会提供任何性能优势,至少在我的系统上我对32位和64位整数具有相同的性能.这样就留下了二进制内存占用空间,虽然不是很多,但会略有减少.

c++ compiler-construction int platform sizeof

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

在sizeof(++ n)表达式中不调用Increment运算符

在C或C++中,当运算符在运算符中时,不执行递增和递减运算符(++n,--n)sizeof().

int n = 100;
int size_int = sizeof(++n);
std::cout<<n;
Run Code Online (Sandbox Code Playgroud)

我编写了这段代码并运行程序.当然,我认为101将会为我展示.但是,n不是101,它是100.

这是为什么?

c c++ increment sizeof

31
推荐指数
4
解决办法
1845
查看次数

C vs C++ sizeof

我只是遇到了这个简单的代码片段,我想知道为什么当它由C编译器编译时该程序的输出是4什么时候它是由C++编译的8.

#include <stdio.h>

int x;

int main(){
    struct x {int a; int b;};
    printf("%d", sizeof(x));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++输出是rational(8 = 4 + 4 = sizeof(x.a) + sizeof(x.b)),但C的输出不是.那么,sizeof在C中如何工作?

似乎C更喜欢全局变量而不是本地变量.这样对吗?

c c++ sizeof

31
推荐指数
1
解决办法
2273
查看次数

有关函数指针大小的保证是什么?

在C中,我需要知道结构的大小,其中包含函数指针.我可以保证在所有平台和架构上:

  • void*的大小与函数指针的大小相同?
  • 由于返回类型,函数指针的大小没有差异?
  • 由于参数类型的不同,函数指针的大小没有差异?

我认为所有这些答案都是肯定的,但我想确定.对于上下文,我正在呼唤sizeof(struct mystruct),仅此而已.

c pointers function-pointers sizeof type-conversion

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