0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数组名之间可以直接赋值吗

学益得智能硬件 来源:学益得智能硬件 2024-11-26 11:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

数组之间的赋值能不能直接使用等于号?比如这样的代码。

int main()
{
    int a[5] = {1, 2, 3, 4, 5}; 
    int b[5] = {0};


    b = a;
    
return 0;
}

想把数组 a 里面的数据全部赋值给 b,写成 b = a 行不行?

和这个问题类似的还有,数组名为什么不能进行 ++ 操作?

chararray[5]={0};
array++;

比如这样的表达式,array++ 在编译的时候就会提示错误:

root@Turbo:~# gcc test.c -o test
test.c: In function ‘main’:
test.c:18:11: error: assignment to expression with array type
   18 |         b = a;
      |           ^
test.c:22:14: error: lvalue required as increment operand
   22 |         array++;
      |              ^~
root@Turbo:~#

需要一个左值作为操作数,换句话说,数组名不能作为左值。

关于数组名,官方的解释是:

/*
 * Except when it is the operand of the sizeof operator, or typeof 
 * operators, or the unary & operator,or is a string literal used 
 * to initialize an array, an expression that has type "array of 
 * type" is converted to an expression with type "pointer to type" 
 * that points to the initial element of the array object and is not
 * an lvalue. If the array object has register storage class, the be
 * havior is undefined.
 * */

除了跟 sizeof、typeof、& 这些运算符一起使用,数组类型通常被转换成指针类型,指向数组的第一个元素,并且它不能作为左值,不能作为左值,也就是不能被修改。

其实也很好理解,数组被初始化后,已经分配了内存,数组名就表示这块内存的地址,如果数组名被修改了,整个数组都要跟着移动,显然不合适。

那 array + 1 这个表达式有没有问题?

当然没有问题,array++ 和 array + 1 是两码事。

array++ 会修改 array 的值,但是 array + 1 只是个表达式,并不会修改 array 的值,如果写成 array = array + 1 才会出问题。

for (int i = 0; i < 5; i++)
{
    b[i] = a[i];
}


//或者 
memcpy(b, a, sizeof(int) * 5);

最后就是关于数组的赋值,在C语言中没有捷径,只能通过循环逐个元素赋值,数组名不能直接赋值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4910

    浏览量

    71341
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    26817

原文标题:数组名之间能否直接赋值

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    matlab appdesigner 表格组件赋值问题,求助

    如上图所示,我在用matlab2021Ra APP模块进行编程的时候,想在表格中调入自己编写的结构数组,我从网上AI了一个程序语句,看着没问题,但是就是给表格赋值不了,还请各位大神帮忙看一下这个是怎么回事,我是初学者,请各位帮忙看看
    发表于 07-12 11:45

    在testbench中如何使用阻塞赋值和非阻塞赋值

    本文详细阐述了在一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟)使用阻塞赋值,对其他同步信号使用非阻塞赋值
    的头像 发表于 04-15 09:34 747次阅读
    在testbench中如何使用阻塞<b class='flag-5'>赋值</b>和非阻塞<b class='flag-5'>赋值</b>

    给uint32_t数组填充整型值,除使用循环赋值外有没有c库函数可以实现?

    给uint32_t数组填充整型值,除使用循环赋值外有没有c库函数可以实现
    发表于 03-07 17:05

    请问LabView中如何直接发送二维数组到DMD上显示?

    LabView中如何直接发送二维数组到DMD上显示。 在LabView中,调用int LoadData(UCHAR*RowData,long length)遇到两个问题,1 二维数组如何输入到
    发表于 02-27 07:30

    数组的下标为什么可以是负数

    a[3],数组名 a 作为数组首元素地址,下标 3 表示从这个地址开始向后移动 3 个元素,至于具体是几个字节,得看什么元素。 所以 a[3] 完全等价于 *(a + 3),甚至把代码写成 3[a] 编译
    的头像 发表于 12-20 11:18 597次阅读

    指针数组和二维数组有没有区别

    指针数组和二维数组有没有区别?比如这样的两个代码。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的头像 发表于 11-24 11:12 602次阅读

    C语言数组应用计算机导论A第6讲:数组

    C语言数组应用计算机导论A第6讲:数组
    发表于 11-20 15:33 1次下载

    铠装光缆可以直接埋地吗

    铠装光缆可以直接埋地。直埋是光缆铺设的一种常见方式,即将光缆直接埋入地下,无需额外的管道或槽道。铠装光缆具有抗压、抗拉、防水等特性,外层材料能够很好地保护光缆,使其适合直接埋地。然而,
    的头像 发表于 11-06 10:09 1515次阅读

    逆变器输出可以直接并网吗

    商业用电。那么,逆变器输出可以直接并网吗?这个问题需要从多个方面进行分析。 首先,我们需要了解并网的概念。并网是指将分布式发电系统(如太阳能光伏系统)产生的电能直接输送到公共电网,与电网中的电能进行交换。这种模式
    的头像 发表于 10-18 09:25 2357次阅读

    C语言指针详细解析

    指向数组元素。 在数组中,数组名即为该数组的首地址,对该指针进行加减,就可以实现指针访问数组元素
    发表于 09-14 10:03

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 6104次阅读

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之数组

    Shell脚本也支持使用数组。1、数组定义方式如下Arr=(a0 a1 a2…an)Arr是数组名称,成员使用()括起来,其中每个成员之间使用空格隔离。另一种定义方式如下所示,每个成员
    发表于 09-03 14:23

    飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之数组

    起来,其中每个成员之间使用空格隔离。另一种定义方式如下所示,每个成员单独赋值:Arr[0]=a0Arr[1]=a1Arr[2]=a2…Arr[n]=an2、数组成员使用可以将每个成员当
    发表于 08-30 09:25

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之变量

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值可以,Shell变量也遵循这个规则。每一个变量的值都是以字符串的形式存储。1
    发表于 08-30 09:21

    飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之变量

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值可以,Shell变量也遵循这个规则。每一个变量的值都是以字符串的形式存储。1
    发表于 08-29 11:04