1. 在c语言中,“不能将一个常量赋值给一个表达式”这句话该怎么理解
所谓赋值,例如int x ,y; x=6; x是有地址,在内存中是有空间的,你可以用&x来取x的地址,但是表达式,例如x+y,这个整个表达式,是没有地址的,所以不能给它赋值。
2. C语言不允许用 赋值运算符 对数组整体进行赋值。这句话怎么理解呀,是一个判断题。
正确。数组是多个元素的集合,而数组名是记录数组首地址的指针常量,赋值时C语言编译器会认为是要修改数组名记录地址值,这是不允许的。
3. C语言里为什么不能用赋值语句对字符数组进行整体赋值
首先C语言里面的数组,一旦定义好了,是无法改变类型和长度的,也不是指针,不能改变指向的内容,所以如下这种写法
inta[10],b[10];
a=b;
是无法编译的。
在其他语言里,比如java,c#,javascript,python等等等等,数组都是作为对象来使用的
可以写a=b,那么a原来表示的数组就被抛弃了,a和b表示的就变成同一个数组了。
而C语言里,数组只是一块具有类型和长度的内存,没有提供如此复杂的功能
从逻辑上讲,可以将数组的赋值的含义变成向数组的元素赋值。但这样就会使得以简单为原则的C语言变得异常复杂:
如果a的长度比b的长度大,那么只更新b的长度,剩下的保持原样;如果b的长度比a的长度大,那么就只更新a的长度。这个还好说,但数组的长度信息只有在它没有转化成指针的时候才存在,当数组作为函数参数,或者赋值给指针的时候,长度的信息就丢失了,就退化成一个指针类型了。这就牵扯到了指针的赋值,而指针的赋值是有原来的语义的。所以事情会变得很复杂。
总而言之就是C作为一种接近底层的语言,它的数组和指针以及内存的使用有数不清的关系,所以不支持这种高级的语法。
4. 在c语言中不是说不允许用赋值语句给字符数组赋值的吗 那为什么此处可用啊
这里不是赋值,这里是初始化的过程,在初始化的时候把这个指针的地址指向这个常量字符串的地址,因此可以在初始化的时候为他赋值。而初始化以后,再直接赋值就不行。
5. C语言中赋值语句有什么规则要求
赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为: 变量=表达式。
在赋值语句的使用中需要注意以下几点:
由于在赋值符“=”右边的表达式也可以又是一个赋值表达式, 因此,下述形式 变量=(变量=表达式); 是成立的,从而形成嵌套的情形。 其展开之后的一般形式为:变量=变量=…=表达式;
例如: a=b=c=d=e=5; 按照赋值运算符的右接合性,因此实际上等效于: e=5; d=e; c=d; b=c; a=b;注意在变量说明中给变量赋初值和赋值语句的区别。 给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。 例如: int a=5,b,c;
在变量说明中,不允许连续给多个变量赋初值。 如下述说明是错误的: int a=b=c=5 必须写为 int a=5,b=5,c=5; 而赋值语句允许连续赋值。
注意赋值表达式和赋值语句的区别。 赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。
下述语句是合法的: if((x=y+5)>0) z=x; 语句的功能是,若表达式x=y+5大于0则z=x。 下述语句是非法的: if((x=y+5;)>0) z=x; 因为x=y+5;是语句,不能出现在表达式中。
6. c语言:“不能在赋值语句中通过赋值运算符‘=’对字符型数组进行整体赋值。”这句话为什么是对的
char s[5]="asdf";
这句不是赋值而是初始化;
讲的赋值语句是在程序执行中的赋值,就像
int a;
int b;
b=a; 这是赋值;
对于字符而言,要赋值就要采用strcpy(s1,s2)这个函数。
7. C语言的条件表达式中不能用赋值=对吗
可以呀,赋值语句的返回值为所赋的值。如
if(x=5)
相当于
if(5)
,true
;又如
if(y=false)相当于
if(false)
并不是说恒为真,要看所赋的值
8. C语言中,字符串为什么不能直接用等于号赋值给一个变量。 例如 int a;a=“bcd”;
等号当然可以用赋值,赋值就是把等号左边值的赋给右边,之所以你写的不对是因为你的数据类型不对。a是int型,即整数型的,例如你可以让a=3意思是把3赋给a,但不能让一个字符串赋给a,所以你那样赋值肯定会报错。
c语言没有专门用于储存字符串的变量类型,字符串都是被储存在char类型的数组中。可以把所有的字符串都看成是一个数组。可以这样声明chara[4]={'b','c','d','