⑴ c語言變長數組如何實現(接收用戶數據的數組)
你的想法是可以的。
實際上C提供一個標準的庫函數可以實現這個功能。
void *realloc(void *mem_address, unsigned int newsize);
譬如:
int *p = malloc(sizeof(int)*3);
p[0]=0;p[1]=1;p[2]=2;
p = realloc(p, sizeof(int)*4);
這個時候,p指向的前三個int的值還是1、2、3,而且可以對第四個int賦值了。realloc會自動把原來的數據復制到新的內存空間上去。
⑵ C語言怎樣定義變長數組
」變長數組「確實是有的,是在C99標准才出現的。題主的寫法沒有錯。變長指的就是可以用變數指定數組大小,而不是說數組大小可以在runtime改變。(」變長「這個這個翻譯很怪啊.....)
寫全的話應該是
int x = 2; //x定義並賦值,當然不一定是2
char array[x];測試了一下,這樣的代碼在VC6.0下會報錯,因為對C99新標准沒有很好地實現。VS2005也不行。VS2013可以正確編譯。gcc
3.2.2也可以正確編譯。
⑶ 簡單問題:如何使用c語言中的變長數組
沒辦法定義
」變長數組「
char
array[x];
x的值
在定義(分配空間時)必須指明
或者程序能得到x的值。
變長數組
基本實現思路是
申請一塊內存
可存放x個元素
當元素的個數大於x後增加x/n個元素空間(可以使用內存復制)
⑷ 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語言中,數組的大小是在定義的時候就需要確定的,不然編譯的時候進行分配內存時,會使計算機不知道該分配多少內存單元而報錯。
然而,可以根據定義一個鏈表來達到可變的效果。
鏈表節點定義如下:
struct
{
intdata;//數據域
structnode*next;//指針域
}*node;
structnodehead,p;
head->data=4;
head->next=p;
p->data=5;
類似的可以將一個節點看成是數組中的一個元素,需要增加元素的時候,就增加鏈表的節點就可以了。
⑹ C語言支持可變長數組嗎,如果可以請舉例書名。謝謝
c99以前的版本是沒有的,數組大小必須是常量或者是常量表達式,c99版本才加入變長數組,如:
int add(int n)
{
int a[n];
......
}
即使它叫做變長數組,但是數組大小一旦確定就不能改變了。
很多書裡面都有介紹,如《深入理解計算機系統》
⑺ 請問C語言中變長數組如何初始化
C語言不支持不定長數組,要麼malloc,要麼在動態的指定它的長度
動態數組不能初始化,可使用memset
1.int* p = (int*)malloc(num);
2.int num = 5;
arr[num];
若使用arr[],則需要在後面對齊進行初始化,來指定長度,否則編譯可以通過,但是默認只有一個單元,超過一個單元的長度,在後面程序的運行中有可能會被沖掉。
⑻ 能否在C程序中改變數組的長度
b是const類型的,值不能改變。
對於數組來說,一般方式定義的數組都是固定長度的。如果希望改變數組的長度,可以採用鏈表來代替普通的靜態數組。
對於簡單類型變數,有另一種更為簡單的方式實現變長數組,就是
int *a;
然後在你需要的地方 a=new int[b];
這個時候b可以是int型的變數,可以在為a分配空間之前計算好。
只需要在最後delete a;就可以釋放為a分配的內存空間。
C當中沒有new和delete的話可以用malloc和free,兩者等價。
以上的方式即可以實現「某種意義下」的無長度限制的一維數組。但是不能夠實現無限長的數組(注意,無長度限制和無限長是不同的概念)。