C语言里为什么不能用赋值语句对字符数组进行整体赋值66
发布网友
发布时间:2023-12-13 14:25
我来回答
共3个回答
热心网友
时间:2024-10-03 19:19
首先C语言里面的数组,一旦定义好了,是无法改变类型和长度的,也不是指针,不能改变指向的内容,所以如下这种写法
int a[10], b[10];
a = b;
是无法编译的。
在其他语言里,比如java,c#,javascript,python等等等等,数组都是作为对象来使用的
可以写a=b,那么a原来表示的数组就被抛弃了,a和b表示的就变成同一个数组了。
而C语言里,数组只是一块具有类型和长度的内存,没有提供如此复杂的功能
从逻辑上讲,可以将数组的赋值的含义变成向数组的元素赋值。但这样就会使得以简单为原则的C语言变得异常复杂:
如果a的长度比b的长度大,那么只更新b的长度,剩下的保持原样;如果b的长度比a的长度大,那么就只更新a的长度。这个还好说,但数组的长度信息只有在它没有转化成指针的时候才存在,当数组作为函数参数,或者赋值给指针的时候,长度的信息就丢失了,就退化成一个指针类型了。这就牵扯到了指针的赋值,而指针的赋值是有原来的语义的。所以事情会变得很复杂。
总而言之就是C作为一种接近底层的语言,它的数组和指针以及内存的使用有数不清的关系,所以不支持这种高级的语法。
热心网友
时间:2024-10-03 19:19
字符数组用char 不用int
a[10] 表示 数组元素不表示数组整体, 数组实际 是a[0]到a[9]同10个元素,不存在a[10]
int a[10]={"abcdefg"};定义数组顺便完成整个数组的 初始化 √(这是初始化 不是“整体”操作赋值...)
分两步
int a[10]; 先定义数组 √
a[10]={"abcdefg"}; 然后使用数组 × ,不能“整体操作”数组,记住 不要在C中试图“整体操作”给整个数组赋值
热心网友
时间:2024-10-03 19:19
初始化和赋值不一样啊…… 原理……就是规定的啊。
C语言里为什么不能用赋值语句对字符数组进行整体赋值
总而言之就是C作为一种接近底层的语言,它的数组和指针以及内存的使用有数不清的关系,所以不支持这种高级的语法。
C语言不允许用 赋值运算符 对数组整体进行赋值。这句话怎么理解呀,是一...
正确。数组是多个元素的集合,而数组名是记录数组首地址的指针常量,赋值时C语言编译器会认为是要修改数组名记录地址值,这是不允许的。
不可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值?
而char s[6]; s=”abcd”; 的写法,编译器虽然可能可以通过,但是如此这般便把s指到了常量区,是不行的。一般认为数组名是一个“常量地址”,不能够变化的,严格的编译器不会通过这个赋值。
C语言中将字符串赋值给字符数组的问题
s=ss;错误原因是:不能用赋值语句将一个字符数组直接给一个字符数组赋值,即字符串的复制(c语言中,但是在c++的string 类,上面的赋值是正确的)必须用strcpy()函数实现。而char a[ ]=”toyou“;正确的原因是:因为在声明数组变量的时候就是,为其开辟空间,并为其初始化,这样才是符合c语言语法...
可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 这句话为什么...
l','l','o','\0'},在其他任何时候,它都表示一个字符串常量。而数组名也是一个指针常量,不能对常量赋值。所以 char a[] = "hello"; //正确,hello",并非一个字符串常量,而是相当于一个初始化列表 而 char a[6];a = "hello"; //错误,a为指针常量,不能修改,当然也不能赋值 ...
二级c语言问题 字符数组可以在定义时对其整体赋初值,但在赋值语句中不...
定义赋初值是指 这样:int a【5】={1,2,3,4,5}; 而赋值语句赋初值是这样: int a 【5】;a【0】=1;a【1】=2,。。。a【4】=5;而不能是这样 a={1,2,3,4,5};就是说如果不是在定义的时候赋值,单独赋值就要对每个成员依次赋值而不能整体赋值 ...
...对字符型数组进行整体赋值。”这句话为什么是对的?
char s[5]="asdf";这句不是赋值而是初始化;讲的赋值语句是在程序执行中的赋值,就像 int a;int b;b=a; 这是赋值;对于字符而言,要赋值就要采用strcpy(s1,s2)这个函数。
赋值语句难道不可以通过运算符“=”对字符数组整体赋值吗 定义的时候...
C语言显然不能,C++可以,你可以用memcpy之类的函数类给数组整体赋值。
c语言数组的赋值
表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。2) 只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:int a[10]=1;多维数组也是一样 给数组赋值的方法除了用初始化赋值外,用赋值语句对数组...
...为什么不能用字符串常量对字符数组名进行整体赋值?
语法规定的,字符串常量对编译器来说只是个地址而已,字符串常量存储在代码段,不可被修改,你可以把字符串给一个字符串指针赋值,但是编译器是不会帮你帮字符串的数据放到数组的空间内,这些要自己完成,或者调用memcpy内存拷贝将整块的字符串复制过去 ...