1. 程式人生 > >C語言 指標與整數相加/減,指標遞增/遞減示例

C語言 指標與整數相加/減,指標遞增/遞減示例

C語言指標變數包含指標自己的地址、儲存單元儲存的內容(指向的地址)、指向的地址上儲存的值。

指標自己的地址:&指標名

儲存單元儲存的內容(指向的地址):指標名

指向的地址上儲存的值:*指標名

下面一個示例演示了指標變數與整數相加/減,指標遞增/遞減時上述三種數值的變化:

#include <stdio.h>
int main() {
int urn[5] = { 100,200,300,400,440 };
int *ptr1, *ptr2, *ptr3;
ptr1 = &urn[0];
ptr2 = &urn[2];
printf("ptr1=%p, &ptr1=%p, *ptr1=%d\n", ptr1, &ptr1, *ptr1);
printf("ptr2=%p, &ptr2=%p, *ptr2=%d\n", ptr2, &ptr2, *ptr2);
ptr3 = ptr1 + 2;
printf("ptr3=%p, &ptr3=%p, *ptr3=%d\n", ptr3, &ptr3,*ptr3);
ptr1++;
printf("ptr1=%p, &ptr1=%p, *ptr1=%d\n", ptr1, &ptr1, *ptr1);
ptr2--;
printf("ptr2=%p, &ptr2=%p, *ptr2=%d\n", ptr2, &ptr2, *ptr2);
getchar();
return 0;
}

得到結果:

ptr1=00DDF7F8, &ptr1=00DDF7EC, *ptr1=100
ptr2=00DDF800, &ptr2=00DDF7E0, *ptr2=300
ptr3=00DDF800, &ptr3=00DDF7D4, *ptr3=300
ptr1=00DDF7FC, &ptr1=00DDF7EC, *ptr1=200
ptr2=00DDF7FC, &ptr2=00DDF7E0, *ptr2=200

指標與整數n相加(減)代表:初始地址+(或-)n*sizeof(指向型別的大小)。此例中ptr3 = ptr1 + 2返回的ptr3所指的地址是ptr1右移兩位的地址,也就是&urn[2]。然而ptr2也是指向這個地址,從輸出結果就能看出ptr2=ptr3和*ptr2=*ptr3,他們所指向表示同一個數值的同一個地址。遞增(++)和遞減(--)運算也同理。

然而指標本身的地址不會隨指向的地址變化而變化,&ptr1,&ptr2,&ptr3是定義時就生成的也是唯一的。