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)