空结构体和空类

今天看到一片博客说面试被问空结构体大小的问题,发现这个问题以前还真没想过。于是自己试了一把,并在网上找了些资料总结如下:
  • 空结构体,先上代码
#include<stdio.h>
typedef   empty{}a;
int   main()
{
printf (“%d”, sizeof (a));
}

以上代码如果采用gcc编译结果是0采用g++结果是1vs2008下如果文件名后缀为.c出现编译错误:C 要求一个结构或联合至少有一个成员;文件名后缀为.cpp能通过编译输出结果是1.
ps:这里发现一个现象,vs下采用不同文件名后缀会调用不同的编译器。这和GNU中的gcc、g++编译器差不多,如果后缀是.c,gcc都当做c程序处理,g++当做c++程序处理。如果后缀是.cpp,gcc和g++都当做c++程序处理。
  • 空类,先上代码
#include<iostream>
using   namespace   std;
class   empty{}a;
int   main()
{
        cout<< sizeof (a)<<endl;
        return   0;
}
 
以上代码在g++和vs下编译运行结果都是1
         那么空类的大小为什么是1呢,上网查了一下,主流观点认为类的实例化要求每个实例在内存中都有独一无二的地址,所以编译器给空类定义大小为1,这样该类的不同实例就有了不同地址。
  • 为什么要使用空结构体和空类
          研究空结构体和空类绝不仅仅是为了解决其大小个问题,当然如果你认为这个问题很有意思我也没办法。目前除了查到空结构体和空类有占位的作用还没查到有别的用途。也就是在代码未成型之前,保证能编译通过的前提下,先写出一个代码架构来,这个时候空结构,空类还有空函数能起到占位的作用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MATLAB 中,可以使用以下语法创建结构体: ``` s = struct(); ``` 这将创建一个结构体 `s`,其中没有任何字段。您可以使用以下语法向结构体中添加字段: ``` s.field1 = value1; s.field2 = value2; ``` 其中,`field1`、`field2` 等是字段名,`value1`、`value2` 等是相应字段的值。 ### 回答2: 结构体是指在MATLAB中创建一个没有任何字段的结构体变量。可以通过如下方式创建结构体: ```matlab S = struct(); ``` 结构体在MATLAB中的作用有以下几个方面: 1. 占位符:当我们需要定义一个结构体变量,但暂时还不清楚需要存储的字段时,可以先创建一个结构体作为占位符。之后根据实际需要添加字段和对应的值。 2. 存储框架:一些算法或函数需要按照结构体的形式进行输入参数或者输出结果的存储,但是这些参数或者结果的具体字段可能是动态的,此时可以先创建一个结构体,然后在算法或函数中根据具体情况为其添加相关字段和对应的值。 3. 作为默认返回值:当函数调用失败或没有给出明确定义的返回值时,可以选择返回一个结构体作为默认返回值,以确保调用者能够获取到正确的输出。 需要注意的是,结构体没有任何字段,因此不能直接对其进行索引操作。若要给结构体添加和访问字段,则需要先通过赋值操作或者使用setfield函数为其添加字段及对应的值。例如: ```matlab S = struct(); % 创建一个结构体 S.name = 'John'; % 向结构体中添加一个字段name,并对应赋值为'John' S.age = 25; % 向结构体中添加一个字段age,并对应赋值为25 disp(S.name); % 输出结构体中字段name的值 ``` 以上代码中,先创建了一个结构体S,然后添加了两个字段name和age,并为其赋值。最后通过disp函数输出了结构体中字段name的值。 总之,结构体是MATLAB中的一个特殊类型,它没有任何字段,但可以用于存储、传递和作为默认返回值。 ### 回答3: 结构体是指在MATLAB中创建一个没有任何字段的结构体变量。在MATLAB中,结构体是一种可以存储不同类型数据的容器。通常我们创建一个结构体时会定义其各个字段及其对应的值,但是有时候我们可能需要一个不包含任何字段的结构体。 在MATLAB中,我们可以用`struct`函数创建一个结构体,即没有任何字段的结构体。例如,可以使用以下代码创建一个结构体变量`emptyStruct`: ``` emptyStruct = struct(); ``` 这样,我们就创建了一个名为`emptyStruct`的结构体变量。虽然这个结构体变量没有任何字段,但我们仍然可以使用结构体的相关操作。例如,我们可以使用点运算符(`.`)来访问和修改结构体变量中的字段,虽然这些操作并不会改变结构体本身。例如,可以使用以下代码访问和修改`emptyStruct`的一个不存在的字段`fieldName`: ``` emptyStruct.fieldName = 'value'; disp(emptyStruct); ``` 运行以上代码,我们会发现`emptyStruct`并没有发生任何变化,仍然是一个结构体。 总之,结构体是指在MATLAB中创建一个没有任何字段的结构体变量。虽然它不包含任何数据字段,但我们仍然可以对其进行访问和修改操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值