上一主题下一主题
关键字
主题 : 关于c声明中的数组问题
级别: 北风技术菜鸟

UID: 470404
精华: 0
发帖: 288
威望: 1384 点
学点: 710 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-06-27
最后登录: 2015-03-29
楼主  发表于: 2015-03-18 12:32||

关于c声明中的数组问题

int a[10]; [{K   
是否可以有以下理解: JDa=+\_  
(1)a表示10个字符的变量。可以赋值“hi!world"字符串 ;*~y4'{z  
(2)a表示10个元素的数组。如[a,b,c,d,••••••] }]fJ[KbDp  
现在不是很理解a的值是一个指针常量,又带有多层理解在里面? :J 7p=sX  
还有个问题: vt(A?$j|A  
例子1: -GqMis}c  
While((ch=getchar())!=EOF&&ch!='\n') :o2^?k8k&#  
                        ; :!fP~(R'm  
例子2: QqF&lMH  
while((getchar)!='\n'); ;z>?- j  
continue; v/1&V+"^kd  
ch=getchar(); PkqOBU*|=  
我的理解:getchar只读取一个字符暂存在临时区,例子1只读取第一个字符然后后面的字符被空的循环语句丢弃了;例子2因为有continue语句只执行读取第一个字符并赋给ch,剩下的字符就留在临时区而丢弃掉。 ]j^V5y"  
那么两个例子语句相等,可以这样理解吗?
此帖悬赏结束
最佳答案: 2 学点
最佳答案获得者: dhx840828284
级别: 北风资深评论员


UID: 470398
精华: 0
发帖: 3024
威望: 3862 点
学点: 8642 点
贡献: 90 点
好评: 0 点
学币: 112 个
注册时间: 2014-06-27
最后登录: 2015-04-07
沙发(1楼)  发表于: 2015-03-18 12:33||

a什么也表示不了。 JuD$CHg;#  
a是一个标识符,它指示一个数组类型的对象。如果不用“变量”这个概念,我认为更有助于你理解和学习C; R8ui LZd  
数组是不可能直接赋值的,因为,声明为数组的标识符,不是一个可修改的左值。从另一个侧面来说,如果一个数组类型的表达式不是sizeof和一元&运算符的操作数,那它会被转换为指向数组首元素的指针,而且不再是一个左值。所以, m&h5u,  
char a [100]; %NI'PXpI  
a = "House of cards.\n"; "E><:_,\  
理所当然是非法的。嘎嘎~ jgb>:]:  
在C中,有空指针常量和常量地址,以及常量指针,空指针常量是指0或者(void *) 0;常量地址是指任何未过生存期的对象的地址;常量指针是指声明为const限定的指针。至于指针常量,倒是没有听说哈,应该是指常量指针……反正都一个意思,嘎嘎,但指示数组的标识符并不是指针常量。 'za4c4b*u  
数组这个东西本来没啥好说的,有关它的很多话题都是没话找话吧。
最佳答案奖励: (+2) 学点
级别: 北风资深工程师

UID: 472685
精华: 0
发帖: 1930
威望: 1946 点
学点: 3280 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-10
最后登录: 2015-04-08
板凳(2楼)  发表于: 2015-03-18 12:33||

牛头不对马嘴。没认真学基础的知识吧? ?.E6Ube  
t98t&YUpm  
a是一个变量名,它代表的变量是一个类型为int的数组变量 5BnO-[3  
而变量a的内容是该变量在内存中的首地址,即a[0]
热心助人奖励: (+1) 学点
级别: 北风资深工程师

UID: 472681
精华: 0
发帖: 1791
威望: 1815 点
学点: 2095 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-10
最后登录: 2015-04-07
地板(3楼)  发表于: 2015-03-18 12:33||

1  a是10个int的数组,把字符串赋值是什么意思? 0Q{^BgW  
2 a里面有10个int