工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1841|回复: 15

请教个C语言sizeof的问题

[复制链接]
发表于 2005-11-20 00:58 | 显示全部楼层 |阅读模式
最近在恶补C语言基础,今晚看书,有个问题不懂。

char a[]="abcde";
char b[]={'a','b','c','d','e'};
char c[10]="abcde";
char d[10]={'a','b','c','d','e'};
char e[10];

sizeof上述几个字符数组分别得到什么呢?
 楼主| 发表于 2005-11-20 00:59 | 显示全部楼层
我只是知道:
a:6
b:5

c,d,e就不知道多少了。呵呵。
回复

使用道具 举报

 楼主| 发表于 2005-11-20 00:59 | 显示全部楼层
好像慧通的笔试考过,俺不懂。。。
回复

使用道具 举报

发表于 2005-11-20 02:13 | 显示全部楼层
char c[10]=\"abcde\";内存状态为abcde\\0\\0\\0\\0\\0,sizeof为10
d也为10
至于e为未定义,应该也是10
回复

使用道具 举报

发表于 2005-11-20 04:21 | 显示全部楼层
6,5,10,10,10...没软件验证...--_-

sizeof(数组名)....返回的是整个数组的字节长度....

sizeof是依赖于编译器的,char 在各种编辑器中几乎都是 1字节...

int,double... 那些,不同编辑器返回值会有不同....
回复

使用道具 举报

发表于 2005-11-20 10:41 | 显示全部楼层
数组的sizeof值等于数组所占用的内存字节数
声明一个数组就是告诉编译器对数组保留多少内存
如:char c[12];就是告诉编译器对c保留12个元素。

带初始值列表的声明中省略了数组长度,数组元素个数是初始列表元素的个数。
像上面的b。
c,d,e都是声明了10个元素的char型数组,所以是10*1=10.
a因为是一个字符串,在未尾要加上一个结束符,所以是6。

所以结果是6.5.10.10.10

char 是1,int是4
回复

使用道具 举报

发表于 2005-11-20 10:45 | 显示全部楼层
参考一下以前这张贴,关于sizeof的讨论的。

https://www.gdutbbs.com/viewthread.php?tid=28695
回复

使用道具 举报

 楼主| 发表于 2005-11-20 14:13 | 显示全部楼层
补充一个:
char s[5]=\"abcde\";

这样是返回几呢?
回复

使用道具 举报

发表于 2005-11-20 15:42 | 显示全部楼层
这样会出错的,数组越界,因为声明数组s大小是5,而赋值有6个元素(还有一个结束符)
回复

使用道具 举报

 楼主| 发表于 2005-11-20 17:32 | 显示全部楼层
ok...

thx

我继续努力我的基础了。
回复

使用道具 举报

发表于 2005-11-20 20:35 | 显示全部楼层
Originally posted by hjack at 2005-11-20 03:42 PM:
这样会出错的,数组越界,因为声明数组s大小是5,而赋值有6个元素(还有一个结束符)



没错~超出左边界~出现错误~~
回复

使用道具 举报

发表于 2005-11-20 20:36 | 显示全部楼层
记住~字符串仲有一个结束标记(\\0)
回复

使用道具 举报

发表于 2005-11-21 13:06 | 显示全部楼层
Originally posted by wool王 at 2005-11-20 14:13:
补充一个:
char s[5]=\"abcde\";

这样是返回几呢?



只超出一个字节有时程序不会出错.有些严格的编译器可能给出警告的提示.但如果超出部分太长有可能覆盖函数的返回地址(当数组在函数里面定义),那样就会有溢出错误.
回复

使用道具 举报

发表于 2005-12-31 11:47 | 显示全部楼层
6,5,10,10,10
回复

使用道具 举报

发表于 2005-12-31 11:51 | 显示全部楼层
Originally posted by wool王 at 2005-11-20 02:13 PM:
补充一个:
char s[5]=\"abcde\";

这样是返回几呢?



返回是5
但赋值出错了
回复

使用道具 举报

发表于 2006-1-1 10:50 | 显示全部楼层
通过这么多讨论,以为对sizeof很了解,到这里再看看,才知道......看看又有新收获
http://www.bwitlab.com/dispbbs.a ... ;ID=7180&page=1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-29 17:29

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表