|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 比较诡异的问题,求教高手
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
495
人关注过本帖
标题:
比较诡异的问题,求教高手
只看楼主
加入收藏
Spygg
等 级:
职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:20 回复次数:6
比较诡异的问题,求教高手
/* Note:Your choice is C IDE */
#include "stdio.h"
struct t
{
char a;
char table[0]; //这个为什么可以这样定义?
}tt;
void main()
{
tt.table[100]=5;
//这个为什么可以是table[100]
printf("%d,%d",tt.table[100],sizeof(tt));//这个大小为什么是1
}
搜索更多相关主题的帖子:
include
choice
2010-11-18 16:01
举报帖子
使用道具
赠送鲜花
wujieru
等 级:
青峰侠
威 望:
1
帖 子:1108
专家分:1939
注 册:2010-10-9
第
2
楼
收藏
得分:0
#include "stdio.h"
struct t
{
char a;
char table[0]; //这个为什么不可以这样定义?
}tt;
void main()
{
tt.table[100]=5;
//这个为什么不可以是table[100]
printf("%d,%d",tt.table[100],sizeof(tt));//这个大小为什么不是1
}
2010-11-18 16:25
举报帖子
使用道具
赠送鲜花
cq7610
等 级:
论坛游侠
帖 子:28
专家分:111
注 册:2010-11-17
第
3
楼
收藏
得分:10
我来理解一下,错了,请大家勿笑。:)
table[0]说明是字符数组的第一个元素,也就是数组的首地址,你可以理解成指针。指针是可以跨过界线,访问自己不该访问的地方。由于只是一个字节大小,所以暂时能正常运行,我相信反复的运行,总会访问禁区,从而导致程序出错。
2010-11-18 17:16
举报帖子
使用道具
赠送鲜花
Spygg
等 级:
职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
第
4
楼
收藏
得分:0
回复 3楼 cq7610
有点道理,但是这个是linux内核中的代码这么定义的,所以....
2010-11-18 17:25
举报帖子
使用道具
赠送鲜花
Spygg
等 级:
职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
第
5
楼
收藏
得分:0
回复 2楼 wujieru
?
2010-11-18 17:25
举报帖子
使用道具
赠送鲜花
南国利剑
等 级:
贵宾
威 望:
29
帖 子:1165
专家分:3536
注 册:2010-4-12
第
6
楼
收藏
得分:10
回复 楼主 Spygg
数组名就是数组的首地址,就是指针。所以tt.table[100]=5; 这个语句没有问题。只是这样做事危险的。
sizeof(tt)就跟sizeof(int),根据你定义的结构体结果就应该是1
南国利剑
2010-11-18 17:41
举报帖子
使用道具
赠送鲜花
dd576503061
来 自:西安
等 级:
新手上路
帖 子:7
专家分:3
注 册:2010-9-17
第
7
楼
收藏
得分:0
对于数组来说,编译器不会检查分配单元大小,即使是越界访问也是由程序员控制的。这个大家可以试试,编译器是不会控制数组大小的,楼上的说法我觉得有些道理,但是也不全是这样子的,因为测试出来tt大小是1,表示编译器认为只给a分配了大小,table没有分配大小,还是按照数组处理的。实际情况中,数组的大小在声明的时候必须大于0,所以对于这个问题大家可以讨论讨论,不要当作可以学习多少东西来看,具体处理方式还是因不同的编译器会有不同~
2010-11-18 17:47
举报帖子
使用道具
赠送鲜花
7
1/1页
1
快速回复:
比较诡异的问题,求教高手
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.020914 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved