相关疑难解决方法(0)

为什么"sizeof(a?true:false)"给出四个字节的输出?

我有一小段关于sizeof三元运算符的运算符的代码:

#include <stdio.h>
#include <stdbool.h>

int main()
{
    bool a = true;
    printf("%zu\n", sizeof(bool));  // Ok
    printf("%zu\n", sizeof(a));     // Ok
    printf("%zu\n", sizeof(a ? true : false)); // Why 4?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(GCC):

1
1
4 // Why 4?
Run Code Online (Sandbox Code Playgroud)

但在这里,

printf("%zu\n", sizeof(a ? true : false)); // Why 4?
Run Code Online (Sandbox Code Playgroud)

三元运算符返回boolean类型,sizeof bool类型是1C中的字节.

为什么要sizeof(a ? true : false)输出四个字节?

c boolean sizeof conditional-operator c11

131
推荐指数
5
解决办法
1万
查看次数

sizeof(数组)如何在运行时工作?

我已经读过C中的sizeof运算符在编译时被解释,因为在编译时编译器知道数组大小及其类型,sizeof能够计算array占用的字节数.但是sizeof如何处理以下代码:

 #include<stdio.h>
 #include<string.h>
 int main()
 {
    int n;
    scanf("%d",&n);
    int a[n];
    int s=sizeof(a);
    printf("%d",s);
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

这里的数组大小在编译时是不知道的,那么它是如何正常工作的?

c sizeof

24
推荐指数
3
解决办法
9312
查看次数

如何在运行时确定c ++对象的内存

我试图在运行时确定对象的大小.sizeof不起作用,因为它在编译时返回大小.这是我的意思的一个例子:

class Foo 
{
public:
    Foo() 
    {
        c = new char[1024*1024*1024];
    }
    ~Foo() 
    { 
        delete[] c; 
    }

private:
    char *c;
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,sizeof(Foo)将是4个字节而不是〜1GB.如何在运行时确定Foo的大小?提前致谢.

c++ memory memory-management runtime

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

无论是否初始化,使用sizeof(p [0])真的无害吗?

如果我们定义了一个数组/指针,我正和我的一个朋友争论:

sometype * p;
Run Code Online (Sandbox Code Playgroud)

如果我们想知道类型的大小,他说应该使用:

sizeof(sometype)
Run Code Online (Sandbox Code Playgroud)

我说过一个人也可以用:

sizeof(p[0]),
Run Code Online (Sandbox Code Playgroud)

它应该是一样的.他不同意,他的观点是如果p没有初始化,那么这种用法p[0]可能会引起问题.

但据我所知,只有当我们改变或依赖其价值时p[0],这才是有害的.既然我们不改变p[0]也不p[0]使用价值,这是完全合情合理的.

既然我们不能说服对方,任何人都可以清楚地说明这个概念.

我知道这个问题没用,几乎所有的开发人员都会使用sizeof(sometype),包括我:).但这个问题很有趣,我真的很想知道是否有任何sizeof(p [0])会有害的情况.

=================================
让我稍微扩展这个问题.如果我确实使用了一些不相关的值(或被视为随机或其他类型).我可以一直p[0]用来获取价值吗?

为了使问题更清楚,如果我不更改未初始化指针的值,只需使用它指向的值,我是否可以始终获取值而不会导致问题?

c++ sizeof

4
推荐指数
3
解决办法
243
查看次数

将int数组转换为c中的int值

我有一个整数数组

int number[] = {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能得到int x = 1234?我需要有它的交流版本.

c

4
推荐指数
1
解决办法
162
查看次数

如果对象是静态的,C++会测量每个调用的sizeof

假设我有一个对象的静态数组,其大小无法改变.

struct vector2 { //8 Bytes
    float x, y;
};
Run Code Online (Sandbox Code Playgroud)

计算机每次sizeof调用时都会计算大小,还是存储在某处?如果没有,它是否具有与存储在某处的相同的性能?

std::cout <<  sizeof(vector2) << std::endl;
std::cout <<  sizeof(vector2) << std::endl;
Run Code Online (Sandbox Code Playgroud)

这是快吗?

Byte sizeOfVector2 = sizeof(vector2);
std::cout <<  sizeOfVector2 << std::endl;
std::cout <<  sizeOfVector2 << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ static sizeof

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