㈠ 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;