• 问题:

上面是结构体中的成员,值得注意的是结构体的最后一个成员数组就不会显示错误。Why?

我们写一个程序测试一下:

当指定了数组大小为1的时候,发现b和c的地址是连续的:

给b数组开辟了一个int大小的空间。

所以如果不给素组限定大小,那么b和&c的地址就会指向同一处。就会提示错误:

但如果b是结构体最后一个元素就无所谓了:

输出:

  • 思考一:

为什么这样是无法赋值的?

报错:

报错:

原因在于,定义结构体的时候,b是一个地址常量,它不能再被赋值。首先,注意不要把数组和指针混淆。指针是一个变量,可以被赋值,而这里的数组b中的"b"是一个地址常量。其次,从实现的角度考虑,数组就是开辟了一段内存空间,用这段空间存放数据,这其中的数据可以更改,但你不能随意挪动数组的位置(即不能随便改变b的值)

  • 思考二:

如果不指定b数组的大小,强行给它赋值会有什么问题?

这段赋值本是没有什么问题的,但是VS在你运行结束之后仍然会提示你:

这里你只给b添加了两个值,可能还没什么影响,但是如果是这样:

就会报Access Violation的错误:

  • 思考三:

对于这段能够正常运行的代码,会输出什么?

我们跟踪进main:

先是开辟了一段堆栈空间,填充的内容都是CCCCC...:

将三个数据存放入结构体中:

struct中的这三个成员在栈中是连续排列的。

运行结束:

这里,为什么会输出一堆乱码?

原因在于你给b数组开辟了10个char大小的空间,但是只给其中一个赋值,它里边有一部分被CCCCC填充,而"CCCC"对应的就是“烫烫”...

总之,结构体中的成员,要给出明确的大小,让机器知道给你预留多少空间。

报错:error C2229: class ' ' has an illegal zero-sized array 引发的思考的更多相关文章

  1. linux使用wkhtmltopdf报错error while loading shared libraries:

    官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在li ...

  2. 发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store

    发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store 昨晚上传项目到AppStore,报了这个错,纳尼! ...

  3. 升级到macOS 10.12 mysqlb报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    系统升级到macOS 10.12后启动mysql后,在终端输入mysql 报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' ...

  4. inoic start projectname sidemenu报错 - Error: Cannot find module 'lodash._baseslice'

    inoic start projectname sidemenu报错 - Error: Cannot find module 'lodash._baseslice' 在公司的电脑上出现过这个错误,后来 ...

  5. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

    运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...

  6. CentOS命令登录MySQL时,报错ERROR 1045 (28000):

    CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解 ...

  7. android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:

    android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 问题原因: ...

  8. mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法

    1. 问题背景         InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoD ...

  9. 运行yum报错Error: Cannot retrieve metalink for reposit

    http://www.netpc.com.cn/593.html 运行yum报错Error: Cannot retrieve metalink for reposit 今天给Centos通过rpm - ...

  10. 转:运行yum报错Error: Cannot retrieve metalink for reposit

    http://www.netpc.com.cn/593.html 运行yum报错Error: Cannot retrieve metalink for repository: epel. Please ...

随机推荐

  1. js中的随机数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. matlab mse函数

    mse是检验神经网络算法的误差分析; mse是平均平方误差性能函数,是网络性能函数.平方误差就是指误差的平方.

  3. javascript中onSubmit="return xxx()"的问题

    javascript中onSubmit="return xxx()"刚开始我是想不通为什么要加return在里面呢,后来想想onSubmit="flase"就不 ...

  4. Python 学习笔记6

    做人要有目标感! 继续学习Python哦.

  5. zonghe

      package hcxAction; import hcxMode.Advertises; import hcxMode.Areas; import hcxMode.Saveresume; imp ...

  6. JPA使用的HelloWorld

    一.使用JPA持久化对象的步骤 •创建 persistence.xml, 在这个文件中配置持久化单元 –需要指定跟哪个数据库进行交互; –需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性 ...

  7. 11--Python 备份文件程序

    最近看了下<A Byte of Python>, 看见一个非常有意思的程序,用python进行文件行备份的练习程序, 自己在机器上敲代码运行了一遍,结果出现了一个小问题,路径出错--&qu ...

  8. oracle Database Link

    1 Database Link 的创建: 有两个数据库服务器A/B, 其中A的IP地址为172.20.36.245, 服务器B为本机.服务器B上的数据库实例名为ORCL,在本机上的服务监听配置上有服务 ...

  9. jQuery实现 图片的局部放大效果

    <html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title> ...

  10. leetcode21

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...