導航:首頁 > 源碼編譯 > c語言在編譯時對數組

c語言在編譯時對數組

發布時間:2022-12-12 10:20:33

⑴ C語言裡面的數組都是在編譯的時候就分配好內存的嗎

編譯的時候 只是確定了內存的大小
實際分配還是在運行時分配的
否則 無數的C語言程序 每一個都分配一段內存
卻不運行 電腦受不了的

⑵ C語言:「除了在定義數組時用初值列表對數組整體賦值以外,無法再對數組變數進行整體賦值。」,對嗎

正確的——

  1. 這里說的「能」與「不能」是指用C語言的語句操作。C沒有提供對數組整體賦值的語句,所以肯定是不能對數組進行整體賦值的。

  2. 嚴格說,「除了在定義數組時……」的說法也欠妥,因為C代碼中的變數定義語句其實也不屬於C,而是C的編譯器語句——就是說那些定義語句並不生成機器代碼,只是在編譯時不一下。

  3. 有人認為memcpy之類的函數能整體對數組賦值,那就更不妥了,因為庫函數也不屬於C語言,比如scanf和printf函數能輸入輸出,但人們都認為C語言沒有提供輸入/輸出功能(其實是指沒有提供輸入/輸出語句);況且memcpy之類的函數也是一個元素一個元素地為數組賦值的。

  4. 所以,雖然常有人問此類問題,但題目本身覺得還是不嚴謹的,「定義時整體賦值」也只是個寫法而已,編譯器還是一個元素一個元素地賦值的,因此「整體不整體」就是個寫法罷了,實質都不能做到整體。

個人理解,供參考。

⑶ 關於C語言中數組分配內存等問題!額,本人是菜鳥,被一C語言書上的話弄暈了! 如果我的問題有些怪,請見諒

1. 准確地說,局部變數是在該函數被調用的時候才會得到所分配的內存空間。但是該內存空間的分配形式是在編譯的時候就確定了的。
2. char a[10]也會自動被初始化為10個'\0'字元。
3. 一般的數組都是靜態數組。動態數組的申請方式一般為:
int *a=malloc(sizeof(int) * 10); // 這個語句申請了一個能容納10個int的動態數組。

靜態數組的意思是:數組的大小在程序編譯完就確定了。動態數組的意思是:數組的大小要程序運行起來之後才知道。
比如 int a[10];那麼它固定死了,就是10個元素大小。
但動態分配方式就不一定。比如:
int n;
....
int *a= malloc(sizeof(int)*n); //分配了一個動態數組。數組大小由n決定。

⑷ c語言結構體數組賦值

(1)用字元常量逐個初始化數組。例如:

char a[8]={'i','l','o','v','e','y','o','u'};

把8個字元依次分別賦給c[0]~c[7]這8個元素。

如果在定義字元數組時不進行初始化,則數組中各元素的值是不可預料的。如果花括弧中提供的初值個數(即字元個數)大於數組長度,則出現語法錯誤。

如果初值個數小於數組長度,則只將這些字元賦給數組中前面那些元素,其餘的元素自動定為空字元(即'')。

如果提供的初值個數與預定的數組長度相同,在定義時可以省略數組長度,系統會自動根據初值個數確定數組長度。

例如:char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m'};

這時c數組的長度自動定為9。也可以定義和初始化一個二維字元數組,例如:

char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},

{'','#','','#'},{'','','#'}};用它代表一個菱形的平面圖形。

(2)字元串常量初始化數組。例如:

char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m'};

可寫為:char c[]={"C program"};

或去掉{}寫為:char c[]="C program";

注意:此時數組c的長度不是9,而是10。因為字元串常量的最後由系統加上一個''。上面的初始化與下面的初始化等價。

char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m',''};

(4)c語言在編譯時對數組擴展閱讀:

其定義的一般形式是:char數組名[數據長度]

例如:

char c[10];

c[0]='I';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';

以上定義了c為字元數組,包含10個元素。

由於字元型數據是以整數形式(ASCII代碼)存放的,因此也可以用整型數組來存放字元數據,例如:

int c[10];

但這時每個數組元素佔2個位元組的內存單元,浪費存儲空間。

字元數組也可以是二維或多維數組,例如:

char c[5][10];

即為二維字元數組。

初始化

字元數組的初始化與數值型數組初始化沒有本質區別。但它除了可以逐個給數組元素賦予字元外,也可以直接用字元串對其初始化。

輸入輸出

字元數組的輸入

(1)用getchar()或scanf()的'%c'格式符對數組進行字元賦值。例如,對於數組a[10]:用getchar()賦值:

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

a<i>=getchar();

用scanf()賦值:

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

scanf("%c",&a<i>);

(2)用scanf()的'%s'格式對數組賦值。還是對於數組a[10]:

scanf("%s",a);

scanf("%s「,&a[0]);

輸入」C program「並回車時,a數組會自動包含一個以」「結尾的字元串」C program「。

字元數組的輸出

(1)用putchar()或printf()的『%c』格式符對數組進行字元賦值。例如,對於數組a[10]:用putchar()賦值:

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

a<i>=putchar();

用printf()賦值:

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

printf("%c",a<i>);

輸出結果為:

c program

(2)用printf()的'%s'格式對數組賦值。還是對於數組a[10];

printf("%s",a);

輸出結果為:

c program

⑸ 在C語言編程中,定義一個數組時要不要初始化

不是不能初始化,是初始化的不對。另外,數組最好用memset初始化。

(1)在定義數組時對數組元素賦以初值。如:

static int a[10]={0,1,2,3,4,5,6,7,8,9};

經過上面的定義和初始化後,a[0]=0,a[1]=1,… ,a[9]=9。

(2)初始化時可以只對一部分元素賦初值。例如:

static int a[10]={0,1,2,3,4};

定義的數組有10個元素,但只對其中前5個元素賦了初值,後5個元素初值為0。

(5)c語言在編譯時對數組擴展閱讀

數組的三種初始化方式

1、靜態初始化

除了用new關鍵字來產生數組以外,還可以直接在定義數組的同時就為數組元素分配空間並賦值。例 int[] a={1,2,3};//靜態初始化基本類型數組

Man[] mans={new Man(1,1),new Man(2,2)};//靜態初始化引用類型數組

2、動態初始化

數組定義與為數組元素分配空間並賦值的操作分開進行。int[] a1=new int[2];//動態初始化元素,先分配空間。

a1[0]=1;//給數組元素賦值

a1[2]=2;

3、數組的默認初始化

數組是引用類型,他的元素相當於類的實例變數,因此數組一經分配空間,其中的每個元素也被按照實例變數同樣的方式被隱式初始化。

實例:int a2[]=new int[2];//默認值0,0

boolean[] b=new boolean[2];//默認值 false,false

String[] s=new String[2];//默認值null

⑹ c語言編譯系統會對數組越界檢查嗎如何才算越界

不會對數組的越界進行檢查。
例如:
int s[3]={1,2,3};
如果你訪問s[0],s[1],s[2]完全正確,如果你要訪問s[3],這就算越界了,因為數組最大下標是2,編譯系統也不會報錯,但後果自負。至於為什麼我不清楚。

⑺ C語言編程

10個C語言新手編程時常犯的錯誤及解決方式

C語言的最大特點是:功能強、使用方便靈活。C編譯的程序對語法檢查並不象其它高級語言那麼嚴格,這就給編程人員留下「靈活的餘地」,但還是由於這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裡的錯誤。看著有錯的程序,不知該如何改起,小編通過對C的學習,積累了一些C編程時常犯的錯誤,寫給各位學員以供參考。

1、將字元常量與字元串常量混淆。

char c;

c="a";

在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a'和『\0',而把它賦給一個字元變數是不行的。

2、輸入數據時,企圖規定精度。

scanf("%7.2f",&a);

這樣做是不合法的,輸入數據時不能規定精度。

3、輸入字元的格式與要求不一致。

在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。

scanf("%c%c%c",&c1,&c2,&c3);

如輸入a b c

字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。

4、輸入輸出的數據類型與所用格式說明符不一致。

例如,a已定義為整型,b定義為實型

a=3;b=4.5;

printf("%f%d\n",a,b);

編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。

5.switch語句中漏寫break語句。

例如:根據考試成績的等級列印出百分制數段。

switch(grade)

{

case 'A':printf("85~100\n");

case 'B':printf("70~84\n");

case 'C':printf("60~69\n");

case 'D':printf("<60\n");

default:printf("error\n");

}

由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如

case 'A':printf("85~100\n");break;

6、定義數組時誤用變數。

int n;

scanf("%d",&n);

int a[n];

數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。7、在不應加地址運算符&的位置加了地址運算符。

scanf("%s",&str);

C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:

⑻ C語言中對數組任意位數賦值

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10000
void main()
{char a[N];
char *p=a;
int check=1; //定義check是為了分撿出每個數
gets(a);
for(;*p;p++)
{ if(*p==' ') check=1; //如果遇到空格表明是一個數字開始轉換,轉換過後(check=0)等待下一個空格即下一個數字
if(check) {check=0; printf("%d ",atoi(p));}
}
}
********************************************
不給定數組的長度。。。。。怎麼可能!!!你不給定長度,程序也會默認有長度。數組長度10000夠了吧。

⑼ C語言中的數組什麼意思

所謂數組,是有序的元素序列。數組是在程序設計中,為了處理方便, 把具有相同類型的若干元素按無序的形式組織起來的一種形式。這些無序排列的同類數據元素的集合稱為數組。

比如油煙機的風扇轉速會和工作的模式之間有一定的關系,那麼我們就可以把它的工作模式和一維數組的下標對應起來,我們將具體的轉速放在數組中,這樣的話就非常方便我們在日後查詢。

再比如說家中的冷暖燈光控制這方面,色溫燈里會有兩個燈珠,分別對應的是冷光和暖光,選擇不同的模式燈光的顏色就不同,我們就可以將這兩種燈光的亮度pwm值事先放在二維數組中,以便調用調光。

在程序中合理地使用數組,會使程序的結構比較整齊,而且可以把較為復雜的運算,轉化成簡單的數組來表示。

(9)c語言在編譯時對數組擴展閱讀:

一、使用規則:

1、可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。

2、只能給元素逐個賦值,不能給數組整體賦值。

(請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。)

3、若不給可初始化的數組賦初值,則全部元素均為0值。

4、假如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。

動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。

二、表示方法:

數組元素是組成數組的基本單元。

數組元素也是一種變數, 其標識方法為數組名後跟一個下標。下標表示了元素在數組中的順序號。數組元素的一般形式為:數組名[下標] 其中的下標只能為整型常量或整型表達式。

如為小數時,C編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的數組元素。數組元素通常也稱為下標變數。必須先定義數組, 才能使用下標變數。在C語言中只能逐個地使用下標變數, 而不能一次引用整個數組。

⑽ C語言數組的初始化表示方法

不是inta[] 而是例如int a[10]這種。括弧內一定要有個常量數字。

我們可以這樣定義

#define N 5

int a[N]

這表明了數組名為a;數組有5個元素;分別是a[0]到a[4];

對於數組來說;數組是變數的集合,因此數組也具有與變數相同的數據類型和儲存類型。數組的類型就是它所有的變數的類型。在定義數組時,應在數組名前對數組的類型加以確定。如上面的int a[10];則表明了數組內元素均為整形。

所有當表示浮點型可以定義為例如float a[10]。 舉例如下:

(10)c語言在編譯時對數組擴展閱讀

數組名是由用戶命名的C語言標識符,要遵循標識符命名規則。數組名表示數組存儲區域的首地址。數組的首地址也就是第一個元素的地址。數組名是一個地址常量,不能對它賦值。

數組名後是由方括弧括起來的常量表達式,不能使用其他括弧

閱讀全文

與c語言在編譯時對數組相關的資料

熱點內容
ios多選文件夾 瀏覽:901
加強行車調度命令管理 瀏覽:241
伺服器已禁用什麼意思 瀏覽:148
部隊命令回復 瀏覽:753
神奇寶貝伺服器地圖怎麼設置 瀏覽:380
加密演算法輸出固定長度 瀏覽:862
程序員去重慶還是武漢 瀏覽:121
伺服器如何撤銷網頁登錄限制 瀏覽:980
微信公眾平台php開發視頻教程 瀏覽:628
怎麼看蘋果授權綁定的app 瀏覽:255
壓縮機單級壓縮比 瀏覽:380
linux測試php 瀏覽:971
什麼時候梁旁邊需要加密箍筋 瀏覽:40
微信清粉軟體源碼 瀏覽:717
matlabdoc命令 瀏覽:550
如何去ping伺服器 瀏覽:75
ecshop安裝php55 瀏覽:817
javaword庫 瀏覽:958
php圖片路徑資料庫中 瀏覽:488
什麼是大擂台演算法 瀏覽:329