中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

C 指針的算術(shù)運(yùn)算

C 指針 C 指針

C 指針是一個(gè)用數(shù)值表示的地址。因此,您可以對(duì)指針執(zhí)行算術(shù)運(yùn)算??梢詫?duì)指針進(jìn)行四種算術(shù)運(yùn)算:++、--、+、-。

假設(shè) ptr 是一個(gè)指向地址 1000 的整型指針,是一個(gè) 32 位的整數(shù),讓我們對(duì)該指針執(zhí)行下列的算術(shù)運(yùn)算:

ptr++

在執(zhí)行完上述的運(yùn)算之后,ptr 將指向位置 1004,因?yàn)?ptr 每增加一次,它都將指向下一個(gè)整數(shù)位置,即當(dāng)前位置往后移 4 字節(jié)。這個(gè)運(yùn)算會(huì)在不影響內(nèi)存位置中實(shí)際值的情況下,移動(dòng)指針到下一個(gè)內(nèi)存位置。如果 ptr 指向一個(gè)地址為 1000 的字符,上面的運(yùn)算會(huì)導(dǎo)致指針指向位置 1001,因?yàn)橄乱粋€(gè)字符位置是在 1001。

我們概括一下:

  • 指針的每一次遞增,它其實(shí)會(huì)指向下一個(gè)元素的存儲(chǔ)單元。
  • 指針的每一次遞減,它都會(huì)指向前一個(gè)元素的存儲(chǔ)單元。
  • 指針在遞增和遞減時(shí)跳躍的字節(jié)數(shù)取決于指針?biāo)赶蜃兞繑?shù)據(jù)類型長(zhǎng)度,比如 int 就是 4 個(gè)字節(jié)。

遞增一個(gè)指針

我們喜歡在程序中使用指針代替數(shù)組,因?yàn)樽兞恐羔樋梢赃f增,而數(shù)組不能遞增,數(shù)組可以看成一個(gè)指針常量。下面的程序遞增變量指針,以便順序訪問數(shù)組中的每一個(gè)元素:

實(shí)例

#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指針中的數(shù)組地址 */ ptr = var; for ( i = 0; i < MAX; i++) { printf("存儲(chǔ)地址:var[%d] = %xn", i, ptr ); printf("存儲(chǔ)值:var[%d] = %dn", i, *ptr ); /* 移動(dòng)到下一個(gè)位置 */ ptr++; } return 0; }

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

存儲(chǔ)地址:var[0] = bf882b30
存儲(chǔ)值:var[0] = 10
存儲(chǔ)地址:of var[1] = bf882b34
存儲(chǔ)值: var[1] = 100
存儲(chǔ)地址:of var[2] = bf882b38
存儲(chǔ)值:var[2] = 200

遞減一個(gè)指針

同樣地,對(duì)指針進(jìn)行遞減運(yùn)算,即把值減去其數(shù)據(jù)類型的字節(jié)數(shù),如下所示:

實(shí)例

#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指針中最后一個(gè)元素的地址 */ ptr = &var[MAX-1]; for ( i = MAX; i > 0; i--) { printf("存儲(chǔ)地址:var[%d] = %xn", i-1, ptr ); printf("存儲(chǔ)值:var[%d] = %dn", i-1, *ptr ); /* 移動(dòng)到下一個(gè)位置 */ ptr--; } return 0; }

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

存儲(chǔ)地址:var[2] = 518a0ae4
存儲(chǔ)值:var[2] = 200
存儲(chǔ)地址:var[1] = 518a0ae0
存儲(chǔ)值:var[1] = 100
存儲(chǔ)地址:var[0] = 518a0adc
存儲(chǔ)值:var[0] = 10

指針的比較

指針可以用關(guān)系運(yùn)算符進(jìn)行比較,如 ==、< 和 >。如果 p1 和 p2 指向兩個(gè)相關(guān)的變量,比如同一個(gè)數(shù)組中的不同元素,則可對(duì) p1 和 p2 進(jìn)行大小比較。

下面的程序修改了上面的實(shí)例,只要變量指針?biāo)赶虻牡刂沸∮诨虻扔跀?shù)組的最后一個(gè)元素的地址 &var[MAX - 1],則把變量指針進(jìn)行遞增:

實(shí)例

#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i, *ptr; /* 指針中第一個(gè)元素的地址 */ ptr = var; i = 0; while ( ptr <= &var[MAX - 1] ) { printf("Address of var[%d] = %pn", i, ptr ); printf("Value of var[%d] = %dn", i, *ptr ); /* 指向上一個(gè)位置 */ ptr++; i++; } return 0; }

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

Address of var[0] = bfdbcb20
Value of var[0] = 10
Address of var[1] = bfdbcb24
Value of var[1] = 100
Address of var[2] = bfdbcb28
Value of var[2] = 200

C 指針 C 指針

其他擴(kuò)展