C语言:“除了在定义数组时用初值列表对数组整体赋值以外,无法再对数组变量进行整体赋值。”,对吗?

Python015

C语言:“除了在定义数组时用初值列表对数组整体赋值以外,无法再对数组变量进行整体赋值。”,对吗?,第1张

正确的——

这里说的“能”与“不能”是指用C语言的语句操作。C没有提供对数组整体赋值的语句,所以肯定是不能对数组进行整体赋值的。

严格说,“除了在定义数组时……”的说法也欠妥,因为C代码中的变量定义语句其实也不属于C,而是C的编译器语句——就是说那些定义语句并不生成机器代码,只是在编译时不一下。

有人认为memcpy之类的函数能整体对数组赋值,那就更不妥了,因为库函数也不属于C语言,比如scanf和printf函数能输入输出,但人们都认为C语言没有提供输入/输出功能(其实是指没有提供输入/输出语句);况且memcpy之类的函数也是一个元素一个元素地为数组赋值的。

所以,虽然常有人问此类问题,但题目本身觉得还是不严谨的,“定义时整体赋值”也只是个写法而已,编译器还是一个元素一个元素地赋值的,因此“整体不整体”就是个写法罢了,实质都不能做到整体。

个人理解,供参考。

一位数组赋值的几种方式inta[10]={1,2,3,4,5,6,7,8,9,10}.一般初始化,例:inta[10]={3,10,5,3,4,5,6,7,8,9};intarray[5]={2,3,4,5,6};其结果是给每一个数组元素都指定了初值。2.部分元素初始化,其余元素均为零。例:inta[10]={7,8,9,67,54};仅给前5个元素赋初值,后5个元素初值为0。3.全部元素均初始化为1。inta[10]={1,1,1,1,1,1,1,1,1,1}不允许简写为 inta[10]={1}或intb[10]={1*10}同学们想一想上述定义a和b数组后,初始化结果是什么? 注意:当程序不给数组指定初始值时,编译器作如下处理:(1)部分元素初始化,编译器自动为没有初始化的元素初始化为0。(2)数值数组如果只定义不初始化,编译器不为数组自动指定初始值,即初值为一些随机值(值不确定)。4.如果全部元素均指定初值,定义中可省略元素的个数。例:inta[5]={9,28,3,4,5}可以写为:inta[]={9,28,3,4,5} 数组元素的引用 c语言规定,不能整体引用数值数组,只能逐个引用数组元素;元素引用方式:数组名[下标表达式]例:a[0]=a[5]+a[7]-a[2*3]“下标表达式”可以是任何非负整型数据。特别强调:1.一个数组元素,实质上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。 2.在c语言中,数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理。

连续批量赋值可以用memset

char

A[20]

memset(A[2],'A',5)//对数组A第3个元素开始的连续5个元素统一赋值为字符'A'

如果每个需要赋值的元素都不同,就只能一个个赋值了。