1樓:匆匆是路認
c語言中陣列的維數表示陣列中元素的個數,在常規陣列中維數是必須要指明的,如果沒有指明,則必須在初始化列表中給定初始值,編譯器通過初始化列表來確定陣列的維數。
int a = ;
上面的**雖然沒有指明陣列的維數,但是編譯知道陣列a的維數是4(只有4個元素)。
要實現用變數定義陣列的元素個數即維數,可以使用malloc()和free()來進行動態記憶體分配 。下面是一個使用動態記憶體的示例:
#include
#include
#include
#include
int main()
//初始化記憶體
memset(p, 0x00, sizeof(int) * size);
//釋放記憶體
free(p);
return 0;}
2樓:匿名使用者
int by_two[size]會在編譯階段初始化,size的值是在執行階段
取到的,編譯階段是沒有取到值,所以錯了。
define size 8是在編譯階段直接替換,int by_two[size]相當於int by_two[8],所以說可以的。
c語言定義常量為什麼不建議用#define
3樓:匿名使用者
c語言的常量就bai是使用#define定義的。你是說duc++吧?zhic++的常量推薦使用const 定義,因為#define只是dao單純的字元專替換,無法檢查資料型別,屬const定義常量需指明資料型別,利於編譯器進行型別檢查。
4樓:匿名使用者
1、那是因bai為對於#define定義,編譯du器會存放在一zhi個記憶區dao域,這個記憶區域相當於我專們稱為巨集
屬為了不把有需要的裝進這個區域,我們只把有必要的,特殊的放進去2、當用#deifne定義的量是不能更改的,這樣就沒法迴圈使用了。
5樓:匿名使用者
這個,看常量型別,如果程式中大量使用且以後可能要經常改變這個常量的值,還是用#define比較方便,否則的話就沒有必要了!
6樓:知識哥哥
樓上的哥們 你用什麼定義的常量可以賦值呢?
7樓:匿名使用者
函式中不能再被重新賦值!
c語言 定義陣列時 大小必須是常量嗎
8樓:yesyes科
1、首先雙擊啟bai動visual studio 2015,單擊「檔案du」-「新建」-「專案zhi」,dao選擇visual c++,然後是「空專案」。
回2、定義了2個一維陣列,一個名為
答arry1的整形陣列,有1個元素;arry2為實型陣列,有100個元素,注意陣列下標是從0開始的,不是從1開始,比如arry1的第一個陣列為arry[0]不是arry[1]。
3、對陣列賦值或者部分賦值,第一個表示x[0]=1,x[1]=2,x[2]=3,x[3]=4,x[4]=5;第二個表示對前三個元素賦值,後面的元素都為0,x[0]=1,x[1]=2,x[2]=3,x[3]=0,x[4]=0。
4、一般形式:陣列名[下標1][下標2],下標也是從0開始表示是第一個元素。
5、最後對二維陣列賦值:int x[2][2] = , }表示x[0][0]=1,x[0][1]=2,x[1][0]=3,x[1][1]=4,x[0][0]表示第一行第一列,其他依次類推即可。
9樓:匿名使用者
哈哈,樓上的兩位真有意思,
一個咬定是"唯一的辦法",一個還吹捧的勁兒內勁兒的
動態陣列的malloc和realloc都不容知道吧。
這麼做就可以了:
既然是記錄條數,那麼一定是一個整數,用動態陣列就可以實現。
#include
void main()
10樓:匿名使用者
c語言中,直來到c99標準出現之前,
自宣告陣列時在方括bai號內只
du能使用整數常量表示式。zhi
而c99做了dao很大改進,允許陣列的[ ]中的值是整形變數或是整形表示式。如:
int n;
scanf ("%d", &n);
int array[n];
雖然n確實是需要執行時動態確定的變數,但是在c99中,以這種變數作為陣列大小的形式已經是允許的了。這樣的陣列就被稱之為「變長陣列」。
注意:變長陣列是指用整型變數或表示式宣告或定義的陣列,而不是說陣列的長度會隨時變化,變長陣列在其生存期內的長度同樣是固定的。
11樓:紅山人
嗯.樓上說的是.這是復通常採用的辦製法.
用預編譯命令,在程式檔案的開關,定義一個常量,如這次你使用這個程式時記錄數是一百,你就可以定義:#define max 100,之後,你就可以定義陣列如a[max]下次你再使用這個程式時,記錄數是200,你只要修改一下這裡就可以了.朋友.
12樓:匿名使用者
是的.可以這樣:
#include
#includenum是變數.
int *a=(int *)malloc(num*sizeof(int));
改變大小
專:a=realloc(a,num2*sizeof(int));
用完屬後
free(a);
13樓:匿名使用者
用#define 在開頭申明,這是唯一的辦法
c語言陣列的定義
14樓:打孃胎裡喜歡你
c語言支援一維陣列和多維陣列。如果一個陣列的所有元素都不是陣列,那麼該陣列稱為一維陣列。
在c語言中使用陣列必須先進行定義,一維陣列的定義方式為:型別說明符; 陣列名 ;[常量表示式]。
其中,型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號,方括號中的常量表示式表示資料元素的個數,也稱為陣列的長度。例如:
int a[10]; /* 說明整型陣列a,有10個元素 */
float b[10], c[20]; /* 說明實型陣列b,有10個元素,實型陣列c,有20個元素 */
char ch[20]; /* 說明字元陣列ch,有20個元素 */
對於陣列型別說明應注意以下幾點:
1、陣列的型別實際上是指陣列元素的取值型別。對於同一個陣列,其所有元素的資料型別都是相同的。
2、陣列名的書寫規則應符合識別符號的書寫規定。
3、陣列名不能與其它變數名相同。例如:
int a;
float a[10];
是錯誤的。
4、方括號中常量表示式表示陣列元素的個數,如a[5]表示陣列a有5個元素。但是其下標從0開始計算。因此5個元素分別為a[0], a[1], a[2], a[3], a[4]。
5、不能在方括號中用變數來表示元素的個數,但是可以是符號常數或常量表示式。例如:
#define fd 5
// ...
int a[3+2],b[7+fd];
是合法的。但是下述說明方式是錯誤的。
int n=5;
int a[n];
6、允許在同一個型別說明中,說明多個陣列和多個變數。例如:
int a,b,c,d,k1[10],k2[20];
15樓:匿名使用者
我是菜鳥~~~
把具有相同資料型別的若干變數按有序的形式組織起來,
以便於程式處理,這些資料元素的集合就是陣列,按照陣列
元素的型別不同,可分為:數值陣列、字元陣列、指標陣列
結構陣列等各種類別。
陣列說明的一般形式為:
型別說明符 陣列名[常量表示式],......;
其中型別說明符可以是任一種基本資料型別或構造資料型別
陣列名是定義的陣列識別符號。常量表示式表示資料元素的個
數,也就是陣列的長度。
對陣列型別的說明應注意:
1)陣列的型別實際上是陣列元素的取值型別。
2)陣列名的書寫應符合識別符號的書寫規範。
3)陣列名不能與其他變數名相同。
4)常量表示式表示陣列元素的個數,但是其下標從0開始計算
5)不能在方括號中用變數來表示元素的個數,但是可以用符號
常數或常量表示式。
6)允許在同一個型別說明中,說明多個陣列和多個變數。
陣列元素的表示方法
一般比較簡單就是陣列名[下標]來引用,先定義後用,如果
是小數的話,直接自動取整。
陣列賦值分為:初始化賦值和動態賦值
初始化賦值一般形式為:
static 型別說明符 陣列名[常量表示式]=;
static表示靜態儲存型別,c語言規定只有靜態儲存陣列和外部陣列
才可做初始化賦值。
c語言對陣列的初始化賦值還有幾個規定:
1)可以只給部分元素賦值。
2)只能給元素逐個賦值,不能給陣列整體賦值。
3)如不給可初始化的陣列賦初值,在在陣列說明中,可以不給出陣列
元素的個數。
下面看一下多維陣列
主要看一下二維陣列,其他的就可以用二維陣列類推得到
二維陣列的型別說明的一般形式是:
型別說明符 陣列名[常量表示式1][常量表示式2]...;
在c語言中二維陣列是按行排列的
二維陣列的表示方法:
陣列名[下標][下標]
二維陣列的初始化
二維陣列初始化也是在型別說明時給各下標變數賦以初值。 二維陣列可
按行分段賦值,也可按行連續賦值。
二維陣列的初始化還應該注意:
1)可以只對部分元素賦初值,未賦初值的元素自動取為0。
2)如對全部元素賦初值,則第一維的長度可以不給出。
字元陣列:
用來存放字元變數的陣列稱為字元陣列。
c語言允許用字串的方式對陣列作初始化賦值。例如:
static char c=; 可寫為:
static char c=; 或去掉{}寫為:
sratic char c="c program";
用字串方式賦值比用字元逐個賦值要多佔一個位元組, 用於存放字串結
束標誌'\0'。上面的陣列c在記憶體中的實際存放情況為: c program\0`\0'是
由c編譯系統自動加上的。由於採用了`\0'標誌,所以在用字串賦初值時一
般無須指定陣列的長度, 而由系統自行處理。在採用字串方式後,字元數
組的輸入輸出將變得簡單方便。 除了上述用字串賦初值的辦法外,還可用
printf函式和scanf函式一次性輸出輸入一個字元陣列中的字串, 而不必
使用迴圈語句逐個地輸入輸出每個字元。
void main()
printf("%s\n",c);
注意在本例的printf函式中,使用的格式字串為"%s", 表示輸出的是一
個字串。而在輸出表列中給出陣列名則可。 不能寫為: printf("%s",c);
void main()
char st[15];
本例中由於定義陣列長度為15, 因此輸入的字串長度必須小於15,
以留出一個位元組用於存放字串結束標誌`\0`。 應該說明的是,對一個字
符陣列,如果不作初始化賦值,則必須說明陣列長度。還應該特別注意的是,
當用scanf函式輸入字串時,字串中不能含有空格,否則將以空格作為串
的結束符。例如執行例4.8,當輸入的字串中含有空格時,運**況為:
input string:this is a book this 從輸出結果可以看出空格以後的字元
都未能輸出。 為了避免這種情況, 可多設幾個字元陣列分段存放含空格的
串。程式可改寫如下:
lesson
void main()
本程式分別設了四個陣列, 輸入的一行字元的空格分段分別裝入四個陣列。
然後分別輸出這四個陣列中的字串。在前面介紹過,scanf的各輸入項必須以
地址方式出現,如 &a,&b等。但在例4.8中卻是以陣列名方式出現的,這是為
什麼呢?這是由於在c語言中規定,陣列名就代表了該陣列的首地址。 整個
陣列是以首地址開頭的一塊連續的記憶體單元。如有字元陣列char c[10],在
記憶體可表示如圖4.2。設陣列c的首地址為2000,也就是說c[0]單元地址為2000。
則陣列名c就代表這個首地址。因此在c前面不能再加地址運算子&。如寫作
scanf("%s",&c);則是錯誤的。 在執行函式printf("%s",c) 時,按陣列名c
找到首地址,然後逐個輸出陣列中各個字元直到遇到字串終止標誌'\0'為止。
字串常用函式:
用於輸入輸出的字串函式在使用前應包含標頭檔案"stdio.h",使用其他字串
函式則應包含標頭檔案"string.h".下面介紹幾個常用的字串函式:
1)字串輸出函式 puts 格式:puts(字元陣列名) 功能:把字元陣列中的字元
串輸出到顯示器。
#include"stdio.h"
main()
2)字串輸入函式gets 格式:gets(字元陣列名) 功能:從標準輸入裝置上
輸入一個字串。
#include"stdio.h"
main()
tips:gets函式並不以空格作為字串輸入結束的標誌,而只是以回車作為輸入
結束,這是與scanf不同的部分
3)字串連線函式strcat 格式:strcat(字元陣列名1,字元陣列名2)
功能:把字元陣列2中的字串連線到字元陣列1中字串後面,並刪去字串
1後的串標誌"\0",本函式返回字元陣列1的首地址。
#include"string.h"
main()
4)字串拷貝函式strcpy 格式:strcpy(字元陣列名1,字元陣列名2)
功能:把字元陣列2中的字串拷貝到字元陣列1中,串結束標誌 "\0"也一同
拷貝,字元陣列2也可以是一個字元常量,就相當於把一個字串賦予一個字元陣列
#include"string.h"
main()
5)字串比較函式strcmp格式:strcmp(字元陣列1,字元陣列2) 功能:
按照ascii碼順序比較兩個陣列中的字串,並有函式返回值返回比較結果
#include"string.h"
main()
a[i]=n;
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}例二:
main()
;int b[3],i,j,l;
for(i=0;i<=2;i++)
printf("\narray a:\n");
for(i=0;i<=2;i++)
printf("\narray b:\n");
for(i=0;i<3;i++)
printf("%5d",b[i]);
printf("\n");
}例三:
void main()
if(p!=i)
puts(cs[i]);
printf("\n");
c語言中是如何定義常量的翱,C語言中是如何定義常量的啊?
c語言定義常量常用的方法有以下2種 第一種 巨集定義 define n 3 定義了一個常量為3的巨集n,在程式中n就代表3 第二種 給變數初始化賦值 int a 2 定義了一個int型變數,並賦值為2,其實這是用變數來定義常量 注 定義常量還是用巨集定義的比較多。c語言如何定義一個常量字串 定義 用...
c語言中如何依次輸入陣列中元素,C語言中如何依次輸入陣列中元素
include int main int a 17 int i for i 0 i 17 i scanf d a i return 0 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const char format argument 返回值 字串長...
c語言中定義陣列可以不寫陣列的長度嗎
不可以,如果不能確定長度,請用stl庫裡的list,map,set等資料類 或者開的陣列開的大一些,保證你不回會越界,答多餘的部分不適用就好在定義的陣列的時候,可以通過變數定義長度如 scanf d arraylen int data new int arraylen c語言中定義陣列時可以不定義長...