C語言指標算術運算


在C語言指標中儲存一個值的地址,所以可以對指標變數進行算術運算。 C語言中的指標可以進行以下算術運算:

  • 遞增
  • 遞減
  • 加法
  • 減法
  • 比較

1.遞增指標

在陣列中使用遞增指標是因為它是連續的記憶體位置。此外,經過計算我們可以知道下一個位置的值。

遞增操作取決於指標變數的資料型別。遞增指標的公式如下:

new_address= current_address + i * size_of(data type)

32位元

對於32int變數,它將增加到2個位元組。

64位元

對於64int變數,它將增加到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

2.指標遞減

與指標遞增一樣,我們可以遞減一個指標變數。遞減指標的公式如下:

32位元

對於32int變數,它將遞減2個位元組。

64位元

對於64int變數,它將遞減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

3.指標相加

我們可以在指標變數上相加一個值。指標相加值的公式如下:

new_address= current_address + (number * size_of(data type))

32位元

對於32int變數,它將相加上2 * number的值。

64位元

對於64int變數,它將增加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,但是在新增了3p變數之後,它是11926740,即4 * 3 = 12增量。由於我們使用64位元運算系統,所以它會相加12,但是如果使用32位元運算系統,它會相加6,即2 * 3 = 6。這是由於整數值占用32位元運算系統中的2位元組記憶體。

4.指標減法

類似於指標加法,我們可以從指標變數中減去一個值。下面給出了從指標變數中減去指定值的公式:

new_address= current_address - (number * size_of(data type))

32位元

對於32int變數,它將減去2 * number的值。

64位元

對於 64int變數,它將減去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)