c語言可變長數組
A. C語言支持可變長數組嗎,如果可以請舉例書名。謝謝
c99以前的版本是沒有的,數組大小必須是常量或者是常量表達式,c99版本才加入變長數組,如:
int add(int n)
{
int a[n];
......
}
即使它叫做變長數組,但是數組大小一旦確定就不能改變了。
很多書裡面都有介紹,如《深入理解計算機系統》
B. 怎麼用C語言定義一個無限長的數組
C語言支持定義一個不顯式定義長度的數組,即通過初始化數據來分配數組長度。
比如int a[] = {1,2,3,4,5}; 數組a的長度沒有顯式給出,由於有5個初始化數據,所以分配空間長度為5個int型。
但是無論如何定義,數組的長度都是固定的,在定義的時候就已經分配好空間,從這個角度上C語言無法定義無限長的數組。但很多實際應用中又事先無法確定數組的長度,對於這類情況,一般有兩種方法可以使用。
1 由malloc和realloc兩個函數,分配動態空間,隨時按需改變數組的最大長度。
通過下面例子來理解該方法:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
intsize=100;//最初為100個元素空間。
int*a=NULL;
inti=0;
a=malloc(sizeof(int)*size);
if(a==NULL)return-1;
while(scanf("%d",a+i)==1)//循環向a中輸入數據,直到輸入非數值字元為止
{
i++;
if(i==size)//數組空間不足
{
size*=2;//將數組空間擴大二倍,也可以改用size+=100;之類的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空間
if(a==NULL)
{
return-1;//這種情況下運行載體(如PC)內存不足以提供,中斷程序。
}
}
}
if(a)free(a);//對申請的內存進行釋放。
return0;
}
從以上程序可以看到,這種方式的原理就是每當數組空間不足時,利用函數realloc分配一段新的內存空間以增大數組長度。 直到占滿所有剩餘空間。
如果到占滿所有空間還是無法存下數據,那麼是硬體無法支持了。
所以這種方法可以做到軟體意義上的無限大數組空間。
但是這種方法代碼量比較大,而且需要頻繁的進行內存的分配,如果實現知道數據的最大可能規模,那麼可以用另一個方法。
2 事先知道數據的最大規模,比如統計一個班的分數時,一個班最多不超過百人,那麼可以直接定義一個長度為100的數組,或者保險起見,定義一個長度為1000的數組,並對其操作。這樣在操作范圍內,這個就是一個「無限長」的數組了。
C. C語言如何定義一個可變大小的數組
在C語言中,數組的大小是在定義的時候就需要確定的,不然編譯的時候進行分配內存時,會使計算機不知道該分配多少內存單元而報錯。
然而,可以根據定義一個鏈表來達到可變的效果。
鏈表節點定義如下:
struct
{
intdata;//數據域
structnode*next;//指針域
}*node;
structnodehead,p;
head->data=4;
head->next=p;
p->data=5;
類似的可以將一個節點看成是數組中的一個元素,需要增加元素的時候,就增加鏈表的節點就可以了。
D. C語言中怎樣定義一個可變大小的數組呢我想根據自己的需要輸入數組的大小,謝謝啦
定義動態數組,例如:
#include <stdio.h>
#include <stdlib.h>
int len;
char *str;
printf("輸入數組的長度:");
scanf("%d",&len);
str=(char*)malloc(len*sizeof(char));
為str分配分配len個字元大小的空間。