在c语言中,是不是数组在定义时一定要指定它的大小,似乎在结构体中可以定义一个不用知名大小的数组?

在C语言中,曾经似乎看到过,可以在数组中定义一个数组,不用初始化其大小,在实际调用的时候才动态分配内存!这是叫什么数组呢?
昨天我去看了下原来那本书,原来叫做柔性数组,只能用在结构体中,并且还只能够是最后一个成员
struct student
{
int iNumber;
char cNameString[20]
float fRoomNum;
char a[];
};
其中的 a[] 就是柔性数组,初始化的时候不会给他分配内存,则该结构体的大小为28。

第1个回答  2020-09-11
结构体中有伸缩数组(C99特性):但用该结构体去定义变量时,该伸缩数组成员是无法使用的,这种结构只能去定义指针,通过动态分配足够的空间,来容纳结构中的正常成员和伸缩数组所需要的空间。
第2个回答  2011-11-13
你说的是 指针数组吗?指针向量的每个值就指向一个数组。追问

不是,当时是这么说的
“结构中先定义一个数组,但是初始化的时候不给他分配内存,而是在我们实际需要的时候动态分配,这个叫什么数组来着,我忘记了

追答

额,我就知道指针数组是这样。。。 数组指针是指一个指向数组的指针,

本回答被提问者采纳

c语言中结构体或数组大小未知是什么意思?
c语言中要求数组定义时必须用常量指定数组大小,可以是常量表达式,比如[2+3],不能是变量,即使变量的值确定了,也不能用变量,比如定义int num=5,再定义int array[num],是不行的。结构体没有大小未知吧,结构体的大小也都是确定的,结构体定义好了,其大小也确定了 ...

c语言中数组的大小可以改变吗
数组大小一旦确定就不能改变。数组长度必须在编译时确定,可以使用malloc函数在程序运行时动态分配所需“数组”长度。定义数组需要指定数组的长度,然后系统会根据这个长度分配固定的内存大小。当出现intarray[10];这种情况的时候,是不可以变的,这时候变量的存储空间在栈区。当intn;cin>>n;intarray=ne...

请问C语言中,如何在结构体内定义长度不确定的数组呢?
一种是采用指针, 动态分配内存 另一种请搜索"柔性数组", 这种方式同样需要在堆中动态分配内存.

C语言数组的初始化表示方法
不是inta[] 而是例如int a[10]这种。括号内一定要有个常量数字。我们可以这样定义 define N 5 int a[N]这表明了数组名为a;数组有5个元素;分别是a[0]到a[4];对于数组来说;数组是变量的集合,因此数组也具有与变量相同的数据类型和储存类型。数组的类型就是它所有的变量的类型。在定义数...

学习C语言需要掌握哪些基本知识?
在C语言中能被其他源文件调用的函数称为外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。 extern可以省略; 14.数组 数组:一块连续的,大小固定并且里面的数据类型一...

C语言里可以在一个结构体里定义另一个结构体的结构体变量吗.
可以 但是你写的有问题 应该是 struct student {struct teacher wang;};谢谢采纳

C语言中,结构体成员中为什么姓名总是用数组来定义,而其他成员如成绩、序...
因为C语言中,char只能存储一个字符,而名字由多个字符组成,所以要定义为数组。成绩、序号一般都是数字,也有特殊情况,比如:混合数字字母的序号,就要用字符数组定义了。

C语言中能否在一个结构体内在定义一个结构体
当然可以,但是你这个结构体的定义域只在父结构体当中,外面没办法用这个结构体的定义做任何事情。比如:struct A { struct B { };struct B b;};这样用是可以的,但是到了结构之外就不能用struct B来定义数据了。

C语言里可不可以定义新的变量类型(不是结构体、枚举、联合体),比如说...
当然可以。不过怎样存储、输出、+-×÷基本运算等都得自己写模块代码,复杂运算更不待说。C自带的运算办法支持不了了。

在C语言中,怎么样定义结构体数组为全局变量?定义一个无返回值的函数,但...
1、任何一个头文件中,或者C文件的非自编函数中定义的变量都是全局变量;2、可以,如:void F(char *sInput) ;就是这样的函数。

相似回答