當前位置:首頁 » 編程語言 » c語言動態創建變數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言動態創建變數

發布時間: 2022-09-08 18:28:19

c語言中怎麼定義動態的數組長度

這個需求是符合C99標准,只要用支持C99標準的編譯器就能通過編譯。
比如下面的代碼,用GCC就能編譯、運行。
#include <stdio.h>
int main()
{
int x = 2, y = 3;
int arr[x][y];
return 0;
}
如果編譯器不支持C99標准,
可以用malloc(size_t )這個函數動態分配內存。

Ⅱ C語言 如何動態創建二維數組

這樣的方法可行,不過要是題目要求輸入m和n,然後再定義二維數組a[m][n],那就行不通了。
你可以這樣做:(以int型為例)
int **a;
int m,n,i;

scanf("%d%d",&m,&n);

a=(int**)malloc(m*sizeof(int*)); /*malloc函數在stdlib.h裡面,用的時候加入這個頭文件*/
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));

/*這樣以後你就可以把a當作二維數組a[m][n]來用了。。

Ⅲ C語言如何定義動態數組

intmain(void)

{

int*number,n,m,i;

printf("thetotalnumbersis:");

scanf("%d",&n);

printf("backm:");

scanf("%d",&m);

number=(int*)malloc(n*sizeof(int));

printf("input%dintegers:",n);

for(i=0;i<n;i++)

{

scanf("%d",&number[i]);

}

(3)c語言動態創建變數擴展閱讀

動態數組,是相對於靜態數組而言。靜態數組的長度是預先定義好的,在整個程序中,一旦給定大小後就無法改變。而動態數組則不然,它可以隨程序需要而重新指定大小。

動態數組的內存空間是從堆(heap)上分配(即動態分配)的。是通過執行代碼而為其分配存儲空間。當程序執行到這些語句時,才為其分配。程序員自己負責釋放內存。使用動態數組的優點是可以根據用戶需要,有效利用存儲空間。

Ⅳ C語言動態變數和靜態變數的區別

一、形式不同:

靜態變數是在定義的時候,有static 修飾的變數,形式為static TYPE var_name = init_value;

動態變數,形式為TYPE var_name = init_value;即沒有static 修飾,其中的=init_value均可省略。

二、作用不同:

動態全局變數:作用域為整個項目,即最終編譯成可執行文件的所有文件中均可以使用動態全局變數,生命周期為從程序運行到程序退出,即貫穿整個運行時間。

靜態全局變數:作用域為當前文件,從定義/聲明位置到文件結尾,生命周期為從程序運行到程序退出,即貫穿整個運行時間。

常量使用

靜態變數也可以用於存儲常數。具體來說,靜態變數(全局變數及匯編語言里定義的符號亦同)可用const,constant或final(根據語言決定)等關鍵字標識,這時其值就會在編譯時設定,並且無法在運行時改變。

編譯器通常將靜態常量與文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區;而如若有需要,有些編譯器還可選擇為其開辟專用區;為防止常數變數被錯誤的指針寫入覆蓋,亦可在這塊區域啟用內存保護機制。

以上內容參考:網路-靜態變數

Ⅳ C語言怎麼動態創建函數

C語言可以通過宏,在你需要的位置宏展開出一個新的函數。
例如:
#define XXX(funcname) \
int funcname (int arg1, int arg2) \
{ return arg1 + arg2; }
但這也是編譯期就決定好了的,也不能實現運行期動態創建。

Ⅵ 用c語言,動態創建m*n的數組

用malloc來實現:
int
m,n;
int
i,j;
int
*p;
scanf("%d%d",&m,&n);
p=(int
*)malloc(sizeof(int)*m*n);
*(p+m*i+j)就相當於數組的i行j列的元素
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(p+m*i+j)
=
i*j;//可以實現對數據賦值
使用完釋放free(p)
下面是我寫的一個例子:
#include<stdio.h>
int
main(void)
{
int
m,n;
int
i,j;
int
*p;
scanf("%d%d",&m,&n);
p=(int
*)malloc(sizeof(int)*m*n);
//*(p+m*i+j)就相當於數組的i行j列的元素
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(p+m*i+j)
=
i*j;//可以實現對數據賦值
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf("%d
",*(p+m*i+j));
free(p);
system("PAUSE");
return
0;
}

Ⅶ c語言如何動態創建二維數組

既然是動態創建,那麼,所創建的二維數組的行、列數應該具有「普適」性,即,應由「用戶」確定二維數組的規模。這是有難度的。因為,二維數組要牽扯行指針,且需要固定每行的列元素個數,用這種思路就沒有辦法達到「普適」。
為此,必須清醒地知道,所謂二維數組,其元素在內存中依然是以一維的方式存放的。說實話,二維數組本質上是不存在的。
既然如此,那麼,「構造」一個所謂的二維數組,只要能提供足夠實用的函數(工具)操作這個二維數組就可以了。
綜上,接受由用戶決定的二維數組行、列值,申請一個一維數組的空間,按照二維數組方式進行定位和操作就可以了。
為簡便起見,我用如下定義,你可以更改裡面的類型,以適應自己的需要:
typedef int USER_TYPE;

// 定義一個控制二維數組(矩陣)的「控制頭」,由三個成員組成

typedef struct MATRIX
{
USER_TYPE *data; // 真正用來存儲二維數組元素的空間

int Row; // 二維數組行數

int Col; // 二維數組列數

}MATRIX;

MATRIX *initMatrix(int row, int col); // 初始化二維數組

USER_TYPE getElementAt(MATRIX matrix, int i, int j); // 取得指定下標的元素

void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val); // 給指定下標的元素賦值
void destroyMatrix(MATRIX *matrix); // 銷毀二維數組

void destroyMatrix(MATRIX *matrix)
{
free(matrix->data);
free(matrix);

}

void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val)
{
matrix.data[i*matrix + j] = val;

}

USER_TYPE getElementAt(MATRIX matrix, int i, int j)
{
return matrix.data[i*matrix.Col + j];

}

MATRIX *initMatrix(int row, int col)
{
MATRIX *mp;

mp = (MATRIX *)malloc(sizeof(MATRX));
mp->data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * row * col);
mp->Row = row;
mp->Col = col;

return mp;

}
把上面的函數當成工具,完成二維數組初始化、賦值、取值等一系列操作,如果需要比較,還需要編寫比較的函數。

Ⅷ C語言中,變數到底是個什麼概念

C語言中的變數是指在程序運行時其值可以改變的量,變數的功能就是存儲數據。每個變數都有特定的類型,類型決定了變數存儲的大小和布局,該范圍內的值都可以存儲在內存中,運算符可應用於變數上。

變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。在指令式語言中,變數通常是可變的;但在純函數式語言(如Haskell)中,變數可能是不可變(immutable)的。

(8)c語言動態創建變數擴展閱讀

常量與變數

常量其值不可改變,符號常量名通常用大寫。

變數是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字元必須為字母或下劃線,否則為不合法的變數名。變數在編譯時為其分配相應存儲單元。

變數的聲明有兩種情況:

1、一種是需要建立存儲空間的。例如:int a 在聲明的時候就已經建立了存儲空間。

2、另一種是不需要建立存儲空間的,通過使用extern關鍵字聲明變數名而不定義它。 例如:extern int a 其中變數 a 可以在別的文件中定義的。

Ⅸ C語言中自動變數是什麼變數它是動態變數的意思嗎怎麼理解

局部變數,如不作專門說明為靜態變數,都是動態分配存儲空間,存儲在動態存儲區中。這種變數叫自動變數。這種變數只在定義它們的時候才創建,在定義它們的函數返回時系統回收變數所佔存儲空間。對這些變數存儲空間的分配和回收是由系統自動完成的,所以也叫自動變數。一般情況下,不作專門說明的局部變數,均是自動變數。

Ⅹ c++語言問題.!~

C是系統級的編程語言
C++是功能很強大,比C開發效率高,因為C++提供了很多演算法和容器類。主要用於多種應用開發,尤其是桌面開發。
C#,很java類似,有自個的應用框架,開發web和桌面程序速度很快。而且基於.net執行,.net其實就是在本地電腦上又加了一層運行時。這樣可以很好的解決本地異構的問題,凡這種語言類腳本語言,特別適合做web開發,因為web開發主要是面臨異構的問題。
代碼生成效率:C<C++<C#
代碼執行效率:C>=C++>C#
1.c++中可以使用宏,當然C++中有很多方式可以避免宏的使用,宏就是文本替換,你給一段代碼起一個名字,然後再你程序中用的這段的代碼的時候,就直接插入宏名即可,編譯之前(預編譯)由預編譯器將宏名換成實際代碼,然後編譯。C++中替代宏的方案有內聯函數(inline),enum,const,template之類的東西。
2.const是變數限定詞,類似的有volatile,register,auto,static,extern之類,你可以翻閱相關參考書(C++
primer)。const和宏常量,enum常量不同,const分配了存儲空間,在程序的.rdata段中,但請注意,這個詞不要常用,你應該用它來先點函數的傳入參數。
3.enum即枚舉類型,枚舉是整形的一個子集,而且這個東西比宏常量好,宏常量出現在預編譯時,enum常量出現在編譯時,const常量出現在運行時。因此宏常量只是文本替換,enum常量需要做靜態類型檢測,如果類型不匹配,則報編譯時錯誤。const常量會做運行時類型檢測。
4.template是C++泛型編程中內容,所謂泛型編程就是編寫的代碼可以針對多個數據類型。如你可以編寫一個加法函數,這個函數可以進行整數,浮點數,復數浮點運算,也可以進行字元串的拼接運算。
5.namespace是命名空間,用來解決標識符命名沖突的問題。其實就是形成雙冒號分字元串來形成標識符。如std::myns::str="ni
shi
xiao
gou!";
std::youns::str="ni
bu
shi
xiao
gou~".
6.malloc,free
是C語言中動態創建變數用的,new和delete是C++中動態創建變數用的。其中malloc和new是分配,free和delete是回收。當然new和delete比malloc和free高級。
還是不懂的話,就認真看書吧
,我告訴你這些,你要是明白了
超出大學本科水平了
!