c語言可變數組
⑴ c語言中怎樣定義一個可變大小的數組呢我想根據自己的需要輸入數組的大小,謝謝啦
定義動態數組,例如:
#include <stdio.h>
#include <stdlib.h>
int len;
char *str;
printf("輸入數組的長度:");
scanf("%d",&len);
str=(char*)malloc(len*sizeof(char));
為str分配分配len個字元大小的空間。
⑵ C語言 可變長數組
我就不看你的bubble sort的演算法部分了,直接跟你講你不知道錯誤的原因。
你第一種寫法:
int n=1, a[n], i=0, j=0, k=0;
這里你已經定義n = 1, 而a[n]也在該行定義。
那麼編譯器在此就直接給a這個數列分配內存了。
也就是說你a這個數組大小就確定了,即為1。
我不知道你學了內存分配沒有,簡單給你講解一下,
具體你可以在網上搜。
比如一個含有5個整數類型的數組可以這樣定義a[5],
但是也可以這樣獲得:int *a = (int *) malloc ( sizeof( int ) * 5 );
也就是說我們給一個指針分配了內存,從而得到一個數組,
而a[5]這樣定義也是需要編譯器在編譯程序的時候分配內存的
而編譯器會根據你的代碼優化你的程序,並把代碼轉化為匯編再者machine code
說多了,繼續給你分析
你修改過的代碼
int n=1, i=0, j=0, k=0;
printf("請輸入數組長度:");
scanf("%d", &n);
int a[n]; //修改
這個時候由於你在聲明數組之前就已經讀入n了,
所以a這個時候才是根據你輸入的數字所得大小的數組。
這樣你懂我的意思了嗎?
⑶ C語言支持可變長數組嗎,如果可以請舉例書名。謝謝
c99以前的版本是沒有的,數組大小必須是常量或者是常量表達式,c99版本才加入變長數組,如:
int add(int n)
{
int a[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++的話可以直接用STL里的vector來實現可變數組。如果必須是C語言的話,可以自己定義鏈表來實現可變長的數組,具體的實現方法可以找任意一本數據結構的書來看。
⑹ C語言可變數組的初始化問題!求大哥幫助 int main(){
1.後面的類型也有數組,數組只是特殊的結構體,具有相同類型的數據存放到連續的地址上
2
只要相同的類型,相同的編譯器,取值范圍都是相同的
3
在全局中的變數編譯器會自動初始化,但在局部變數中不帶初始化的變數是隨機值
還有你inta[]錯了,不能這樣定義
4
char
字元初始化null
⑺ C語言可變長數組問題
可變長數組只有執行了C99標準的編譯器里才可以實現, 其他如VC6.0 VS編譯器都沒執行這個標准,所以沒法使用可變長數組,只能動態分配數組。
⑻ c語言可變數組用的多嗎
可變數組用於不需要確定數組下標
⑼ C語言如何定義一個可變大小的數組
在C語言中,數組的大小是在定義的時候就需要確定的,不然編譯的時候進行分配內存時,會使計算機不知道該分配多少內存單元而報錯。
然而,可以根據定義一個鏈表來達到可變的效果。
鏈表節點定義如下:
struct
{
intdata;//數據域
structnode*next;//指針域
}*node;
structnodehead,p;
head->data=4;
head->next=p;
p->data=5;
類似的可以將一個節點看成是數組中的一個元素,需要增加元素的時候,就增加鏈表的節點就可以了。
⑽ 如何聲明可變長度的數組 C語言
C99允許用變數做數組下標,也就是可以聲明可變長度的數組,但是據我所知,目前還沒有C99標準的編譯器!VC也不是。但你可以用一個宏定義做嘛,改的時候改宏定義那一個地方就可以了。