1樓:手機使用者
指標與陣列
1)用指標編寫的程式比用陣列下標編寫的程式執行速度快,但另一方面,用指標實現的程式理解起來稍微困難一些
2)例如:int a[10]; int *pa;
pa = &a[0];則可以將指標pa指向陣列a的第0個元素,也就是說,pa的值為陣列元素a[0]的位址
x = *pa; 將把陣列元素a[0]中的內容複製到變數x中
pa + 1; 如果pa指向陣列中的某個特定元素,那麼,根據指標運算的定義,pa+1將指向下乙個元素
pa + i; 將指向pa所指向陣列元素之後的第i個元素
pa - i; 將指向pa所指向陣列元素之前的第i個元素
因此,如果指標pa指向a[0],那麼*(pa+1)引用的是陣列元素a[1]的內容,pa+i是陣列元素a[i]的位址,*(pa+i)引用的是陣列元素a[i]的內容
pa = &a[0]; <=> pa =a; pa和a具有相同的值,因為陣列名所代表的就是該陣列最開始的乙個元素的位址
對陣列元素a[i]的引用也可以寫成*(a+i)這種形式
在計算陣列元素a[i]的值時,c語言實際上先將其轉換為*(a+i)的形式,然後再進行求值,因此在程式中這兩種形式是等價的
&a[i] <=> a+i; 兩者等價,a+i是a之後第i個元素的位址
pa[i] <=> *(pa+i) 如果pa是乙個指標,那麼,在表示式中也可以在它的後面加下標
3)陣列名和指標之間有乙個不同之處。指標是乙個變數,因此,在c語言中,語句pa=a和pa++都是合法的。但陣列名不是變數,因此類似於a=pa和a++形式的語句是非法的。
4)當把陣列名傳遞給乙個函式時,實際上傳遞的是該陣列第乙個元素的位址。在被呼叫函式中,該引數是乙個區域性變數,因此,陣列名引數必須是乙個指標,也就是乙個儲存位址值的變數。
5)在函式定義中,形式引數char s;和char *s;是等價的。如果將陣列名傳遞給函式,函式可以根據情況判定是按照陣列處理還是按照指標處理,在函式中甚至可以同時使用陣列和指標這兩種表示方法。
在函式f(int arr) 和 f(int *arr)中
f(&a[2])與f(a+2)都將把起始於a[2]的子陣列的位址傳遞給函式f
6)如果確信相應的元素存在,也可以通過下標訪問陣列第乙個元素之前的元素。類似於p[-1],p[-2]這樣的表示式在語法上都是合法的,它們分別引用位於p[0]之前的兩個元素。當然,引用陣列邊界之外的物件是非法的。
2樓:匿名使用者
樓上兩個也太誇張了把。
舉個例子陣列a[10]代表陣列a中有10個元素 而a中的元素分別為
a[0],a[1],......,a[9]
c語言中一維陣列正確的定義
3樓:旅者一生
符號常量是用乙個識別符號來表示乙個常量,一維陣列的定義方法為:型別說明符+陣列名+[常量表示式];
型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示陣列元素的個數或者長度,可以是常量或符號常量,不能為變數。
例如:1、int x[8]; 表示定義乙個整型陣列x,陣列長度為8.
2、float a[8],b[10];表示定義乙個實型陣列b,陣列長度為8,乙個實型陣列c,陣列長度為10
3、 ch[15]; 表示定義乙個字元陣列ch,陣列長度為15。
擴充套件資料
在程式中可以使用下標變數,即說明這些變數的整體為陣列,陣列中的每個變數的資料型別是相同的。當陣列中每個元素都只帶有乙個下標時,稱這樣的陣列為一維陣列。
一維陣列是由數字組成的以單純的排序結構排列的結構單一的陣列。一維陣列是電腦程式中最基本的陣列。二維及多維陣列可以看作是一維陣列的多次疊加產生的。
陣列是計算機程式設計中的重要概念,運用陣列可以方便地處理大規模的資料。
4樓:
定義如下:
符號常量是用乙個識別符號來表示乙個常量,一維陣列的定義方法為:型別說明符+陣列名+[常量表示式];型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。
方括號中的常量表示式表示陣列元素的個數或者長度,可以是常量或符號常量,不能為變數。
5樓:
這道題正確的答案是:c選項。
a. int a (5);
錯誤,因為不能用(),()一般函式,以及(*int)強制轉換型別。
b. int n=5, a[ n ];
錯誤,因為不能是變數。
c.int a[sz];
正確,sz為符號常量,如被定義是:#define sz 10,這就是int a[sz];
符號常量的解釋:
1、符號常量是:在c語言中,可以用乙個識別符號來表示乙個常量,稱之為符號常量。
2、符號常量在使用之前必須先#define定義(如**1),一般使用const來指明(如**2)。
**例項1:#define max_size 256;
**例項2:const int max_size =256;
3、#define 也是一條預處理命令(預處理命令都以"#"開頭),稱為巨集定義命令,通過預處理器來替換符號常量,其功能是把該識別符號定義為其後的常量值。
一經定義,以後在程式中所有出現該識別符號的地方均代之以該常量值。習慣上符號常量的識別符號用大寫字母,變數識別符號用小寫字母,以示區別。
4、符號常量雖然有名字,但它不是變數。它的值在其作用域內是不能改變的,也不能被賦值。
5、使用符號常量的好處是:1、含義清楚。2、在需要改變乙個常量時能做到「一改全改」。
6樓:匿名使用者
在c語言中使用陣列必須先進行定義。一維陣列的定義方式為:
型別說明符 陣列名 [常量表示式];
其中,型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示資料元素的個數,也稱為陣列的長度。例如:
1、int a[10]; /* 說明整型陣列a,有10個元素 */2、float b[10], c[20]; /* 說明實型陣列b,有10個元素,實型陣列c,有20個元素 */
3、 ch[20]; /* 說明字元陣列ch,有20個元素 */
7樓:匿名使用者
c語言中定義一維陣列如下:
資料型別 陣列名[陣列長度]; // 不進行初始化的陣列
資料型別 陣列名[陣列長度] = ; // 進行初始化的陣列
舉例如下:
// 定義乙個int型的未進行初始化陣列data1
int data1[5];
// 定義乙個int型的數
組data2,並對陣列中各元素進行初始化
int data2[5] = ;
擴充套件資料:
定義陣列的定義格式如下:
型別識別符號 陣列名[常量表示式]
說明:①陣列名的命名規則與變數名的命名規則一致
②常量表示式表示陣列元素的個數。可以是常量或符號常量,不能為變數。
例如:int a[10]; //陣列a的定義是合法的
int a[n];
引用通過給出的陣列名稱和這個元素在陣列中的位置編號(即下標),程式可以引用陣列中的任意乙個元素。
在c++中,一維陣列的引用格式為:陣列名[下標]
例如: int a[10];
其中,a是一維陣列的陣列名,該陣列有10個元素,依次表示為a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]。需要注意的是,a[10]不屬於這乙個陣列的空間範圍中。當在說明部分定義了乙個陣列變數後,編譯程式會在記憶體空間中開闢一串連續的儲存單元。
對於陣列而言,程式的執行部分使用的是陣列變數而不是陣列型別。需要注意的是:在引用時,下標可以是整型變數或整型表示式。
如果使用表示式,會先計算表示式以確定下標。程式只能逐個應用陣列中的元素而不能一次引用整個陣列。如:
int a[100],b[100]; a=b;
8樓:乙隻蟈蟈
陣列的定義格式如下:
型別識別符號 陣列名[常量表示式]
說明:
①陣列名的命名規則與變數名
的命名規則一致
②常量表示式表示陣列元素的個數。可以是常量或符號常量,不能為變數。
例如: [1]
1、 int a[10]; //陣列a的定義是合法的
2、 int a[n]; //若n為變數,則陣列a的定義是非法的
拓展資料:
對於陣列型別說明應注意以下幾點:
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];
9樓:風不停息
符號常量的概念是:在程式執行過程中,其值不能被改變的量稱為常量.用乙個標示符代表乙個常量的符號,稱為符號常量
符號常量在使用之前必須先定義,其一般形式為:#define 識別符號 常量
其中define是一條預處理命令,被叫做巨集定義命令,功能是把這個識別符號定義為常量值。經過定義之後程式中所有出現這個識別符號的地方都用這個常量值代替。
擴充套件材料:
另一層含義指它們的編碼方法是不變的(但是嚴格來說『人為規定的某一種方法也可以因地制宜而人為改變,所以其本身數值大小『不是『常量』的內涵』),比如字元'a'無論在硬體、軟體還是各種程式語言中,它的資訊編碼即為 『 0x41』。
在除了『c/c++』的一些高階程式語言中,『常量』可以被稱作,「在乙個資訊變化過程中,始終不發生改變的量」,其可以是不隨著時間變化的某些量的固定資訊;也可以表示為某一數值的字元(或字串),常被用來標識、測量和比較兩者的差異。
但在 『c/c++語言中』,『常量』如果還用『執行過程中不變的量』來描述,就顯得不太準確了,甚至是在具體使用時,這就是乙個錯誤的概念。在 『c/c++』中,定義『指標常量』時,根據『const 』的位置的不同,可以定義出幾個不同的形式,雖然其看起來『符合常量的概念』,但是在實際執行中,其值或位址值是會發生變化的。所以本質還不是『常量概念』
形式為 :const type name = value;
例如:const int months = 12;
這樣就可以在程式中使用months而不是12了。常量(如months)被初始化後,其值就被固定了,編譯器將不允許再修改該常量的值。假如您這樣做:
months = 18;
是不對的,就好像您將值4賦給值3一樣,無法通過編譯。
此外注意應在宣告中對const進行初始化。下面的**是不正確的:
const int toes;// toes的值此時是不確定的
toes=10;//這時進行賦值就太晚了
關於c語言二維陣列的問題,C語言中二維陣列的定義問題
a是乙個一維陣列,陣列裡的值是指標,指向的還是一維陣列。即等價於,int x 2 2,0 int y 2 4,8 int a 2 x,y 我想你應該知道答案了。c語言中二維陣列的定義問題 正確寫法如下 char fd jgf1 maxitemlen 1 說明 把null去掉 1.二維陣列的第乙個維度...
C語言中,怎樣將一維陣列中的數,賦給二維陣列
可以採用兩種方式 1 按元素賦值 遍歷一維陣列,並將每個元素賦值到二維 內陣列的對應元素上容。或者遍歷二維陣列,將每個元素賦值為一維陣列對應值上。優點為操作靈活,可以按照需要任意賦值。2 當一維陣列和二維陣列型別相同,而且賦值順序與一維陣列中的儲存順序完全相同時,可以用memcpy的方式,直接一次性...
c語言中,陣列元素的下標下限為,c語言中陣列元素下標的上下限是什麼?
c語言中,陣列元素的下標下限為0。陣列中的各元素的儲存是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a 0 表示名字為a的陣列中的第乙個元素,a 1 代表陣列a的第二個元素,以此類推。對於vb的陣列,表示陣列元素時應注意...