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

如题所述

正确的——

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

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

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

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

个人理解,供参考。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-23
您好,非常荣幸能在此回答您的问题。以下是我对此问题的部分见解,若有错误,欢迎指出。二维数组可以看成特殊的一维数组,每个元素又由一个一维数组组成。
例如:构建一个maxrownum*maxrownum的矩阵
long double **data1_bfE;
data1_bfE=(long double **)malloc(maxrownum*sizeof(long double *));
for(i=0;i<maxrownum;i++)
{
data1_bfE[i]=(long double *)malloc(maxrownum*sizeof(*data1_bfE));
}
data1_bfE[i]=(long double *)malloc(maxrownum*sizeof(*data1_bfE));

动态分配maxrownum个long double的内存空间,跟long double a[5]相似,但前者是堆上分配的,后者是栈上分配的;
data1_bfE=(long double **)malloc(maxrownum*sizeof(long double *));

意思就是定义一个有maxrownum个long double类型的指针的动态数组,然后在里面存放指针,相当于容器,data1_bfE就会成为指针的指针。
注意事项:C语言在定义数组和表示数组元素时常常采用a[ ][ ]的形式,使用方便,不易出错。非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!本回答被网友采纳
相似回答