⑴ C语言里面的数组都是在编译的时候就分配好内存的吗
编译的时候 只是确定了内存的大小
实际分配还是在运行时分配的
否则 无数的C语言程序 每一个都分配一段内存
却不运行 电脑受不了的
⑵ C语言:“除了在定义数组时用初值列表对数组整体赋值以外,无法再对数组变量进行整体赋值。”,对吗
正确的——
这里说的“能”与“不能”是指用C语言的语句操作。C没有提供对数组整体赋值的语句,所以肯定是不能对数组进行整体赋值的。
严格说,“除了在定义数组时……”的说法也欠妥,因为C代码中的变量定义语句其实也不属于C,而是C的编译器语句——就是说那些定义语句并不生成机器代码,只是在编译时不一下。
有人认为memcpy之类的函数能整体对数组赋值,那就更不妥了,因为库函数也不属于C语言,比如scanf和printf函数能输入输出,但人们都认为C语言没有提供输入/输出功能(其实是指没有提供输入/输出语句);况且memcpy之类的函数也是一个元素一个元素地为数组赋值的。
所以,虽然常有人问此类问题,但题目本身觉得还是不严谨的,“定义时整体赋值”也只是个写法而已,编译器还是一个元素一个元素地赋值的,因此“整体不整体”就是个写法罢了,实质都不能做到整体。
个人理解,供参考。
⑶ 关于C语言中数组分配内存等问题!额,本人是菜鸟,被一C语言书上的话弄晕了! 如果我的问题有些怪,请见谅
1. 准确地说,局部变量是在该函数被调用的时候才会得到所分配的内存空间。但是该内存空间的分配形式是在编译的时候就确定了的。
2. char a[10]也会自动被初始化为10个'\0'字符。
3. 一般的数组都是静态数组。动态数组的申请方式一般为:
int *a=malloc(sizeof(int) * 10); // 这个语句申请了一个能容纳10个int的动态数组。
静态数组的意思是:数组的大小在程序编译完就确定了。动态数组的意思是:数组的大小要程序运行起来之后才知道。
比如 int a[10];那么它固定死了,就是10个元素大小。
但动态分配方式就不一定。比如:
int n;
....
int *a= malloc(sizeof(int)*n); //分配了一个动态数组。数组大小由n决定。
⑷ c语言结构体数组赋值
(1)用字符常量逐个初始化数组。例如:
char a[8]={'i','l','o','v','e','y','o','u'};
把8个字符依次分别赋给c[0]~c[7]这8个元素。
如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。
如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'