解釋C語言中的指標和一維陣列
指標是一個儲存另一個變數地址的變數。
特性
指標的特性解釋如下:
- 指標節省記憶體空間。
- 由於直接訪問記憶體位置,指標的執行速度更快。
- 藉助指標,可以高效地訪問記憶體,即動態分配和釋放記憶體。
- 指標用於資料結構。
指標的宣告、初始化和訪問
考慮以下語句:
int qty = 179;
在記憶體中,變數可以表示如下:
宣告指標
這意味著“p”是一個指標變數,它儲存另一個整型變數的地址,如下所示:
Int *p;
指標的初始化
地址運算子 (&) 用於初始化指標變數。
例如:
int qty = 175; int *p; p= &qty;
透過指標訪問變數
要訪問變數的值,使用間接運算子 (*)。
例如:
這裡,‘*’可以理解為地址上的值。
以下語句等效於上述兩個語句:
p = &qty; n = *p; n =qty
指標和一維陣列
- 編譯器為陣列的所有元素分配連續的記憶體位置。
- 基地址 = 陣列的第一個元素地址(索引 0)。
- 例如:int a [5] = {10, 20, 30, 40, 50};
元素
五個元素儲存如下:
如果 'p' 宣告為整型指標,則可以使用以下賦值語句讓陣列 'a' 指向它:
p = a; (or) p = &a[0];
可以使用 p++ 來訪問 'a' 的每個值,從而從一個元素移動到另一個元素。當指標遞增時,其值會增加它指向的資料型別的尺寸。這個長度稱為“比例因子”。
‘p’ 和 'a' 之間的關係解釋如下:
P = &a[0] = 1000 P+1 = &a[1] = 1004 P+2 = &a[2] = 1008 P+3 = &a[3] = 1012 P+4 = &a[4] = 1016
可以使用元素的索引和資料型別的比例因子來計算元素的地址。這裡給出一個例子來解釋這一點。
Address of a[3] = base address + (3* scale factor of int) = 1000 + (3*4) = 1000 +12 = 1012
可以使用指標訪問陣列元素,而不是使用陣列索引。
*(p+3) 給出 a[3] 的值。
a[i] = *(p+i)
示例程式
以下是 C 語言指標和一維陣列的程式:
#include<stdio.h> main ( ){ int a[5]; int *p,i; printf ("Enter 5 lements"); for (i=0; i<5; i++) scanf ("%d", &a[i]); p = &a[0]; printf ("Elements of the array are"); for (i=0; i<5; i++) printf("%d", *(p+i)); }
輸出
執行上述程式後,將產生以下結果:
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50
廣告