在C語言指標中儲存一個值的地址,所以可以對指標變數進行算術運算。 C語言中的指標可以進行以下算術運算:
在陣列中使用遞增指標是因為它是連續的記憶體位置。此外,經過計算我們可以知道下一個位置的值。
遞增操作取決於指標變數的資料型別。遞增指標的公式如下:
new_address= current_address + i * size_of(data type)
32位元
對於32
位int
變數,它將增加到2
個位元組。
64位元
對於64
位int
變數,它將增加到4
個位元組。
下面來看看看在64
位元運算系統上增加指標變數的例子。建立一個原始檔:increment-pointer.c,其程式碼如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p + 1;
printf("After increment: Address of p variable is %u \n", p);
}
執行上面範例程式碼,得到以下結果 -
Address of p variable is 17824724
After increment: Address of p variable is 17824728
與指標遞增一樣,我們可以遞減一個指標變數。遞減指標的公式如下:
32位元
對於32
位int
變數,它將遞減2
個位元組。
64位元
對於64
位int
變數,它將遞減4
個位元組。
我們來看看在64
位元運算系統上遞減指標變數的例子。建立一個原始檔:decrement-pointer.c,其程式碼如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p - 1;
printf("After decrement: Address of p variable is %u \n", p);
}
執行上面範例程式碼,得到以下結果 -
Address of p variable is 18218432
After decrement: Address of p variable is 18218428
我們可以在指標變數上相加一個值。指標相加值的公式如下:
new_address= current_address + (number * size_of(data type))
32位元
對於32
位int
變數,它將相加上2 * number
的值。
64位元
對於64
位int
變數,它將增加4 * number
的值。
下面來看看看在64
位元運算系統上相加一個值到指標變數的例子。建立一個原始檔:addition-pointer.c,其程式碼如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p + 3; //adding 3 to pointer variable
printf("After adding 3: Address of p variable is %u \n", p);
}
執行上面範例程式碼,得到以下結果 -
Address of p variable is 11926728
After adding 3: Address of p variable is 11926740
正如你所看到的,p
的地址是11926728
,但是在新增了3
與p
變數之後,它是11926740
,即4 * 3 = 12
增量。由於我們使用64
位元運算系統,所以它會相加12
,但是如果使用32
位元運算系統,它會相加6
,即2 * 3 = 6
。這是由於整數值占用32
位元運算系統中的2
位元組記憶體。
類似於指標加法,我們可以從指標變數中減去一個值。下面給出了從指標變數中減去指定值的公式:
new_address= current_address - (number * size_of(data type))
32位元
對於32
位int
變數,它將減去2 * number
的值。
64位元
對於 64
位int
變數,它將減去4 * number
的值。
我們來看一下64
位元運算系統從指標變數減去指定值的例子。
建立一個原始檔:subtraction-pointer.c,其程式碼如下 -
#include <stdio.h>
void main() {
int number = 50;
int *p;//pointer to int
p = &number;//stores the address of number variable
printf("Address of p variable is %u \n", p);
p = p - 3; //subtracting 3 from pointer variable
printf("After subtracting 3: Address of p variable is %u \n", p);
}
執行上面範例程式碼,得到以下結果 -
Address of p variable is 17825120
After subtracting 3: Address of p variable is 17825108
從指標變數中減去3
後,可以看到比前一個地址值小12
,即:(4 * 3)
。