一维数组是什么,能赋值吗?

如题所述

1、您必须明白char str[10];是定义了一个含有十个元素的数组,而且这十个元素在内存中是以连续的存储单元存放的。其中str是该数组的数组名字,而且str还是该数组的首地址,也就是十个元素中的第一个元素的地址,但务必注意str是一个指针常量,它是不能被赋值的也不能进行自增自减的!例如:假设你在函数中声明一个char str[10];操作系统为其分配一个连续的10个存储单元,假设其首地址是1024,那么str的不仅代表着数组的名字而且它的值是1024,是一个常量不能被改变。

2、您指出char str[10];str="string";是错误的,因为前面已经指出str只是一个地址,不是变量是不能被赋值的。

3、char *s;是定义的一个指针变量,它指向一个字符型数据,它是可以被赋值的。指针变量和普通变量是一个道理的,不同的只是指针变量存放的是地址,而普通变量存放的是数值或字符等。*s代表的是指针所指向的数据,您用*s="string";是错误的,因为*s和其他变量一样只能存放一个一个字符,而"string"中包含7个字符分别为s,t,r,i,n,g,\0;切勿把*s="string"与s="string"混同,后者是可以的,因为s是一个指针s="string"是把该字符串的首地址赋值给了s而不是把string的每个地址都给了s,前面已经指出字符串"string" 是存放在连续的存储单元的,所以可以通过s的递增来实现对每个元素的访问。

4、一维数组的初始化应该是如果元素为整数可用char str[10]={5,4,3,2,1};如果是字符则用char str[10]="string";

最后我帮你指出您的式子错误的地方,您在结合书本好好理解一下,因为不能画图所以我说的可能繁杂了点!

【一】char s[5]="string";(数组s仅有5个存储空间是不能存放7个元素的)
等价于char *s;*s="string";(*s仅能代表一个元素,是不能赋值给它整个数组的)
【二】char s[5]="string";(错误同上 )
等价于char *s; s="string";(这个式子是对的)
【三】char str[10]={"string"} ;(字符数组初始化是不能用这样的方式的如果是整数则可以,例如:int str[10]={1,2,3,4,5})
等价于char str[10]; *str[10]={"string"};(*str[10]是错误的,它本身就不是个指针所以不能用“*”该符号!str[10]只是代表字符数组的第十个元素,所以不能将怎个字符串赋值给他)

正确的式子
char s[10]="string"等价于char *s;s="string";

指针是C语言的难点也是奥秘所在,掌握了指针C语言也不在神秘,推荐你看一本书《c和指针》人民邮电出版社,希望我的回答能帮助到您!
温馨提示:答案为网友推荐,仅供参考