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

    文章

    4751

    浏览量

    68357
  • 数组
    +关注

    关注

    1

    文章

    416

    浏览量

    25910

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

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

收藏 人收藏

    评论

    相关推荐

    嵌入式学习-飞凌嵌入式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

    为什么给io赋值时常看到 =和|=,而不是直接=呢?

    如题,为什么给io赋值时常看到 =和|=,而不是直接=呢?
    发表于 04-30 06:55

    鸿蒙TypeScript入门学习第11天【Array(数组)】

    数组对象是使用单独的变量来存储一系列的值。 数组非常常用。
    的头像 发表于 04-09 14:38 1054次阅读
    鸿蒙TypeScript入门学习第11天【Array(<b class='flag-5'>数组</b>)】

    为什么指针之间不要随意赋值呢?

    指针之间也不能随意赋值
    的头像 发表于 03-28 17:13 507次阅读
    为什么指针<b class='flag-5'>之间</b>不要随意<b class='flag-5'>赋值</b>呢?

    mapgis如何给区属性赋值

    地进行数据分析和可视化。 在MapGIS中给区属性赋值有多种方法,下面将详细介绍其中的几种常用方法。 1.手动赋值 手动赋值是最直接和简单的方法。首先,在MapGIS中打开需要进行属性
    的头像 发表于 02-23 17:49 2082次阅读

    proteus属性赋值工具怎么用

    Proteus是一种电路设计和仿真软件,在进行电路设计和仿真时,属性赋值是非常重要的步骤。属性赋值工具可以帮助用户快速有效地配置电路元件的属性,从而实现电路的准确仿真。下面是关于Proteus属性
    的头像 发表于 02-23 17:19 4153次阅读

    verilog同步和异步的区别 verilog阻塞赋值和非阻塞赋值的区别

    Verilog中同步和异步的区别,以及阻塞赋值和非阻塞赋值的区别。 一、Verilog中同步和异步的区别 同步传输和异步传输是指数据在电路中传输的两种方式,它们之间的区别在于数据传输的时间控制方式。 同步传输:同步传输是通过时钟
    的头像 发表于 02-22 15:33 1555次阅读

    数组和链表在内存中的区别 数组和链表的优缺点

    内存中的存储方式: 数组是一种连续存储的数据结构,它将元素存储在相邻的内存位置中。这使得数组的访问效率高,可以通过下标来直接访问任何一个元素。 链表是一种离散存储的数据结构,它将元素
    的头像 发表于 02-21 11:30 922次阅读

    G10指令可以对参数进行赋值,位型参数可以吗?

    G10指令可以对参数进行赋值,位型参数可以吗? G10指令是用于在加工程序中进行参数赋值的指令。它可以用于指定数值型参数或位型参数。 首先,
    的头像 发表于 02-18 10:49 781次阅读

    PHP中数组的使用方法!

    如何创建数组、添加/删除元素、访问数组元素、遍历数组以及使用数组方法和函数等等。 首先,我们来看一下如何创建一个数组。 1. 创建
    的头像 发表于 01-12 15:11 508次阅读

    labview怎么查数组中相同元素的个数

    要查找LabVIEW中数组中相同元素的个数,可以使用以下步骤: 创建一个包含要查找的数值的数组。这可以通过手动输入数组元素或从文件/其他数据
    的头像 发表于 12-28 16:42 3241次阅读

    数组与指针不能混用的情况

    和指针的基本概念。数组是一组相同类型的元素的集合,而指针是一个变量,它存储了一个地址,该地址指向内存中的某个位置。在 C/C++ 中,数组名可以当作指向数组第一个元素的指针来使用。这
    的头像 发表于 12-07 13:46 572次阅读

    oracle sql 定义变量并赋值

    赋值可以通过使用PL/SQL语句块或使用SQL*Plus工具来实现。下面将详细介绍这两种方法以及它们的具体用法。 使用PL/SQL语句块定义和赋值变量: 在Oracle SQL中,PL/SQL是一种过程化语言,允许在代码中定义和
    的头像 发表于 12-06 10:46 2693次阅读

    jsp判断数组是否包含某个值

    元素,以及利用条件语句进行有效的值检查。 1.阵列基础知识: 数组是一种数据结构,允许在一个变量名下存储同一类型的多个值。在JSP中,可以通过各种方式声明和初始化数组,例如显式指定大小或直接
    的头像 发表于 11-30 16:18 967次阅读