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++實(shí)現(xiàn)inline hook的原理及應(yīng)用實(shí)例
這篇文章主要介紹了C++實(shí)現(xiàn)inline hook的原理及應(yīng)用,需要的朋友可以參考下2014-08-08
C++通過(guò)CryptoPP計(jì)算Hash值的過(guò)程詳解
Crypto++ (CryptoPP) 是一個(gè)用于密碼學(xué)和加密的C++庫(kù),它是一個(gè)開(kāi)源項(xiàng)目,提供了大量的密碼學(xué)算法和功能,本文小編給大家介紹了C++通過(guò)CryptoPP計(jì)算Hash值的過(guò)程,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用
這篇文章主要介紹了C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
C語(yǔ)言實(shí)現(xiàn)冒泡排序算法的示例詳解
這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)冒泡排序算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
C語(yǔ)言中如何利用循環(huán)嵌套輸出一個(gè)菱形
這篇文章主要介紹了C語(yǔ)言中如何利用循環(huán)嵌套輸出一個(gè)菱形問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
C語(yǔ)言實(shí)現(xiàn)去除字符串中空格的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇C語(yǔ)言實(shí)現(xiàn)去除字符串中空格的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄(靜態(tài)版本)的代碼分享
這篇文章主要為大家詳細(xì)介紹了如何錄音C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)易的通訊錄(靜態(tài)版本),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-10-10
C++?QT實(shí)現(xiàn)獲取本機(jī)網(wǎng)卡信息
這篇文章主要為大家詳細(xì)介紹了如何利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫(kù),獲取當(dāng)前windows電腦下的網(wǎng)卡信息,需要的可以參考下2024-01-01

