搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 比较诡异的问题,求教高手
标题:
比较诡异的问题,求教高手
只看楼主
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
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-326138-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.887031 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved