C語(yǔ)言中指針的加減運(yùn)算方法示例
char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2);
從結(jié)果可以看到,字符數(shù)組每個(gè)元素占1字節(jié),字符指針數(shù)組每個(gè)占4字節(jié)。
再看一個(gè)例子:
char a = 'a', b = 'b', c = 'c', d = 'd'; char *arr[20] = {&a,&b,&c,&d}; char **parr = arr; //arr的類型也是char** char *str; printf("&a:%d,&b:%d,&c:%d,&d:%d\n", &a, &b, &c, &d); printf("&arr[0]:%d,&arr[1]:%d,&arr[2]:%d,&arr[3]:%d\n", &arr[0], &arr[1], &arr[2], &arr[3]); printf("arr:%d,parr:%d\n", arr,parr); printf("*parr:%d,**parr:%c\n", *parr, **parr); str = *parr; //arr[0],char*類型 printf("----- str=*parr -----\n"); printf("str:%d,*str:%c\n", str, *str); str++; printf("----- str++ -----\n"); printf("str:%d,*str:%c\n", str, *str); str = *(parr + 1); printf("----- str=*(parr+1) -----\n"); printf("str:%d,*str:%c\n", str, *str); str = *(parr + 2); //*(arr+2*4) printf("----- str=*(parr+2) -----\n"); printf("str:%d,*str:%c\n", str, *str);
指針的加減運(yùn)算,就是將指針當(dāng)前值與sizeof(指針指向的類型)相加減。
比如上例中str=*parr,這時(shí)str當(dāng)前值為arr[0],指向的類型是一個(gè)字符(所以大小為1字節(jié)),str++就代表arr[0]+1*1,但是由于指針數(shù)組的每一項(xiàng)占4字節(jié),所以之后的*str輸出為?。
再比如上例中str=*(parr+1),指針parr當(dāng)前值為arr,指向的類型是一個(gè)字符指針char*類型(所以大小為4字節(jié)),parr+1就代表arr+1*4,向高地址方向移動(dòng)4個(gè)字節(jié),即&arr[0]+4==&arr[1],str就變成了arr[1],所以之后輸出的*str為b。
另外
指針和指針進(jìn)行加減:兩個(gè)指針不能進(jìn)行加法運(yùn)算,這是非法操作,因?yàn)檫M(jìn)行加法后,得到的結(jié)果指向一個(gè)不知所向的地方,而且毫無(wú)意義。兩個(gè)指針可以進(jìn)行減法操作,但必須類型相同,一般用在數(shù)組方面,不多說(shuō)了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- C語(yǔ)言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問(wèn)題
- 深入分析C語(yǔ)言中結(jié)構(gòu)體指針的定義與引用詳解
- 解析C語(yǔ)言中空指針、空指針常量、NULL & 0的詳解
- C語(yǔ)言 用指針作為函數(shù)返回值詳解
- C語(yǔ)言入門之指針用法教程
- c語(yǔ)言指針之二級(jí)指針示例
- C語(yǔ)言的指針類型詳細(xì)解析
- C語(yǔ)言指針的長(zhǎng)度和類型深入分析
- C語(yǔ)言指針學(xué)習(xí)經(jīng)驗(yàn)總結(jié)淺談
- C語(yǔ)言 結(jié)構(gòu)體和指針詳解及簡(jiǎn)單示例
相關(guān)文章
C\C++實(shí)現(xiàn)讀寫二進(jìn)制文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了C\C++實(shí)現(xiàn)讀寫二進(jìn)制文件的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2023-03-03C++ STL標(biāo)準(zhǔn)庫(kù)std::vector的使用詳解
vector 是表示可以改變大小的數(shù)組的序列容器,本文主要介紹了C++ STL標(biāo)準(zhǔn)庫(kù)std::vector的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++初學(xué)者之根據(jù)輸入的任何一個(gè)正整數(shù),輸出可能被表示的連續(xù)正整數(shù)
這篇文章主要介紹了C++初學(xué)者之根據(jù)輸入的任何一個(gè)正整數(shù),輸出可能被表示的連續(xù)正整數(shù)的相關(guān)資料,需要的朋友可以參考下2016-03-03QT編寫地圖實(shí)現(xiàn)設(shè)備點(diǎn)位的示例代碼
在地圖應(yīng)用的相關(guān)項(xiàng)目中,在地圖上標(biāo)識(shí)一些設(shè)備點(diǎn),并對(duì)點(diǎn)進(jìn)行交互這個(gè)功能用的最多的,于是需要一套機(jī)制可以動(dòng)態(tài)的添加、刪除、清空、重置。本文將詳細(xì)介紹這些功能如何實(shí)現(xiàn),需要的可以參考一下2022-01-01