㈠ c语言中长度可变的数组
如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。
而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:
void func( int n ){int vla[2*n]; // 合法:存储周期为动态的static int e[n]; // 非法:长度可变数组不可有静态存储周期
struct S { int f[n]; }; // 非法:f不是一个普通标识符/* ... */}
㈡ C语言怎么用变量定义来数组元素个数
C语言中数组的维数表示数组中元素的个数,在常规数组中维数是必须要指明的,如果没有指明,则必须在初始化列表中给定初始值,编译器通过初始化列表来确定数组的维数。
int a[] = {1,2,3,4};
上面的代码虽然没有指明数组的维数,但是编译知道数组a的维数是4(只有4个元素)。
要实现用变量定义数组的元素个数即维数,可以使用malloc()和free()来进行动态内存分配 。下面是一个使用动态内存的示例:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
intmain()
{
intsize;
printf("输入建立元素的个数:");
scanf("%d",&size);
int*p=(int*)malloc(sizeof(int)*size);
if(p==0){
printf("不能分配内存 ");
return0;
}
//初始化内存
memset(p,0x00,sizeof(int)*size);
//释放内存
free(p);
return0;
}
㈢ c语言中数组元素的个数可以不固定吗
1.一维数组的定义方式为: 类型说明符 数组名 [常量表达式];
例如 int a[10];
常量表达式中可以包括常量和符号常量,不能包含变量。也就是说,c不允许对数组的大小作动态定义,
即数组的大小不依赖于程序运行过程中变量的值。
2.不过可以用宏定义来解决问题的:
#define M 20
然后在程序中定义数组a[M]
这样就可以通过改变M的数值来解决问题。
㈣ C语言 结构体数组的个数如何自己定义
C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义。如:
structst{
intx,y;
charstr[10];
};
structst*array;
intn;
printf("inputn:");scanf("%d",&n);
array=(structst*)malloc(n*sizeof(structst));//动态分配n个结构体空间,接下来array的操作,与数组操作是相同的,如:array[0].x=1;
C99以后,C语言标准开始支持动态定义数组,但动态数组,在其确定个数之后,在其生命期中,就不可变了。如:
structst{
intx,y;
charstr[10];
};
intn;
printf("inputn:");scanf("%d",&n);
structstarray[n];//定义动态数组
array[0].x=1;
㈤ c语言中可不可以用变量定义数组的个数
数组不可以,但是有变通的方法
intn;
scanf("%d",&n);
int*s;
s=(int*)malloc(sizeof(int)*n);
//相当用定义了一个长度为n的int数组,调用和数组一样,s[0],s[1].....
㈥ C语言怎么用变量定义来数组元素个数
定义时直接用变量乱孙不行,但可以先定义一个逗唯希望数组类型的指针,使用的时候动态申请变量所表示的大小,并赋值给前定义指针,申请成功后就可山陪培以像数组一样使用了(指针名就是数组名)
int
*myarr;
int
size;
size
=
10;
myarr
=
(int
*)malloc(size
*
sizeof(int));
myarr[0]
=
123;
myarr[size-1]
=
999;