㈠ c語言中數組長度不能用變數定義嗎
1、C語言中不支持。
C++中支持變長數組(你可以自行度娘變長數組和alloca函數),但是因為其實在棧上分配,不被推薦使用。做為解決方案,你可以使用C式的malloc函數或者C++式的new函數來在堆上動態分配內存,這樣長度是完全可以自定的。
2、C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
3、、在數組一章中,曾介紹過數組的長度是預先定義好的, 在整個程序中固定不變。C語言中不允許動態數組類型。例如: int n;scanf("%d",&n);int a[n]; 用變數表示長度,想對數組的大小作動態說明, 這是錯誤的。但是在實際的編程中,往往會發生這種情況, 即所需的內存空間取決於實際輸入的數據,而無法預先確定。對於這種問題, 用數組的辦法很難解決。
4、為了解決上述問題,C語言提供了一些內存管理函數,這些內存管理函數可以按需要動態地分配內存空間, 也可把不再使用的空間回收待用,為有效地利用內存資源提供了手段。 其它文獻中所提到的"動態數組",指的就是利用內存的申請和釋放函數,在程序的運行過程中,根據實際需要指定數組的大小.其本質是一個指向數組的指針變數.常用的內存管理函數有以下三個:分配內存空間函數malloc;分配內存空間函數 calloc;釋放內存空間函數free。
㈡ C語言中怎麼定義動態的數組長度
動態數組長度,對於部分新的編譯器,支持C99的,可以直接用變數定義數組
比如
func(intn)
{
inta[n];
....
}
不過 有些編譯器不支持 會報錯
就只能使用動態數組,也就是malloc
如
func(intn)
{
int*a;
a=(int*)malloc(sizeof(int)*n);
....
free(a);
}
㈢ c語言中如何自定義數組長度
C99標准支持不定長數組(代價是不能用goto語句)。在輸入語句後聲明就可以了。
不過現在的編譯器對C99的支持都不好```
對於ANSI C(C89)一般的編譯器都支持。不過數組長度必須是編譯期確定的常量,運行時不能改變。所以採用動態分配實現。
例如
#include<stdio.h>
#include<stdlib.h>/*這個頭文件在用malloc和free等分配內存函數時必須被包含*/
int main()
{
int n,*a=NULL;
printf("Please input the num of elements:\n");
scanf("%d",&n);
if(!(a=(int *)malloc(n*sizeof(int)))
{
printf("Memory is not accessed!\n");
exit(1);/*內存分配失敗時異常退出。也需要stdlib.h*/
}
/*如下使用方法實質是相同的*/
scanf("%d",a[0]);
scanf("%d",a+0);
/*這里寫代碼*/
free(a);
/*用完之後需要釋放,否則會造成內存泄漏*/
}
return 0;
}
其它還有calloc、realloc等,C++里也可以用new、delete等運算符(如 confuciuskg 所述),具體用法可以直接網路。
㈣ C語言定義數組長度問題
可以是可以,但可能會引起內存不夠,溢出問題,所以個人建議在函數前定義數組
㈤ C語言中可以定義不定長度的數組(即數組長度由變數確定)嗎
不可以,數組在創建時長度已經確定了,而且創建後也無法更改數組的長度,樓上說的malloc動態申請的內存也是已確定的,你都不能在 不破壞原有數據的情況下改變其大小。
那怎麼儲存未知大小的數據呢,在儲存後怎樣能隨意的對其添加、更改、刪除、查找等一系列操作呢?只用簡單的數組肯定不行,需要用到別的數據結構,如鏈表、二叉樹等等,總有一款適合你。在大家學到數據結構與演算法的時候 ,一切難題都將迎刃而解。
最後補充一點,樓上有人說數組的長度不能用變數來確定,這是錯誤的。 C中有 變長數組 的概念呀(c99標准),「變長」的意思就是 可以用變數來指定數組的長度,而數組一旦創建 長度就無法變化了,而且變數必須賦值在先,變長數組才能創建。某些人不能因為無法正確的設置編譯器支持c99標准,而否定了 變長數組 這個用法。
㈥ 怎麼在C語言中重新定義數組的長度
C語言一維數組分靜態一維數組和動態一維數組兩種。 一、靜態一維數組,在定義的時候就已經確定其長度。如 int a[10];就是定義了一個長度為10個元素的整型數組。 靜態數組不支持長度的增加。如果要增加長度,只能新定義一個更長的數組,
㈦ c語言怎麼由用戶定義數組長度
一般不是這樣定義的,我一般都是,先定義好數組長度,如int
a[100],就是先把數組定義的比較大就可以了,然後再int
n;scanf("d%",&n);int
a[n];
㈧ 關於C語言中定義數組大小的問題(最多能定義多少)
查了一下,這個錯誤是棧溢出。 棧的大小是比較有限的, 不能定義這樣大的東西
需要一個大的數組的話應該定義一個指針,然後用malloc分配內存空間給他,這個是在堆上分配的,可以分配很多
㈨ c語言 自定義數組長度
說明數組之前先說明變數。
所有的變數在使用之前都必須先定義。為什麼呢?因為變數都是存放內存當中(當然一些存放在代碼段如單片機使用關鍵字code的變數另算),一般每個內存單元的大小是一個位元組,如果你在使用一個變數時沒有事先定義它的類型,也就是說,編譯器根本不知道該變數所佔的內存空間的大小,變數能存放的數據范圍也未知,這勢必會造成紊亂,兩個變數所規劃的內存地盤不明確,CPU在訪問時有沒有越界都不知道,這樣編譯器當然不會幫你干這種壞事啦。所以,一個變數在使用之前必須先定義(存儲方式、數據類型)。
好,再來說說數組。
數組是什麼概念,有木有深刻的理解過?好,我現在說說一維數組(其實多維數組也是一樣的)。
數組是一組具有相同類型並且有一定的相互關系的變數的集合。注意,每個數組元素都是一個變數。那這些有相互關系而且數據類型一樣的變數是怎麼存放在內存當中的呢?其實,他們是連續存放的,也就是說他們中間沒有間隔不相關的內存單元。而且編譯器也要事先知道你這個數組的長度是多少,才能分給你家多少內存。(就好像某某政府要分田地給老百姓,先數一下確定你家到底多少人口,才能分多少地給你家,不然不是浪費就是種田的時候種到別人家的田地去了,呵呵,是吧?這個編譯器是絕對不允許的)。
所以說,一個數組在定義時必須要事先規定好這個數組的長度,這樣編譯器才知道怎麼樣分配內存空間給這個數組。這里注意一點,數組的長度必須是一個常量,變數是不行的,變數的值可以改變,編譯器已經分配了多少空間給這個數組,怎麼能說變就變呢?因為編譯器是編譯器,程序是程序,這個跟定義一個變數是一樣的。
使用malloc函數,一般結合鏈表來用,鏈表存放的數據就不一定是連續的了。
等某一天你變成中國的計算機牛B人物了,可以想個辦法做個超吊的編譯器實現數組長度想怎麼變就怎麼變,哥也期待那一天,弟,你行的。
所以說,你想的太天真啦。哈哈。