C语言的指针移动怎么理解
?C Primer pkus(第五版)中文版,老外寫的還是很經(jīng)典的,推薦給朋友們,購買地址:C primer plus 5版中文版購買
另外再推薦本書:
程序員面試寶典(第5版)第五版:程序員面試寶典(第5版)第五版
剛學(xué)習(xí)C語言的朋友,對指針“移動”可能不太理解。舉個例子,例如下述代碼:
int a = 1;
那么大家都知道a + 1肯定就是2了。如果是指針呢?例如:
int *p = 1;
p + 1還是2嗎?
為了說明問題,請看以下代碼:
#include "stdio.h" #include "stdlib.h"int main() {int index = 0;int number[3] = {1, 2, 3}; //定義一個整型數(shù)組int *p = &number[0]; //指針p的初始值是數(shù)組第一個元素的地址printf("p的值是 %x\n", p); //輸出p的值,也就是數(shù)組第一個元素的地址printf("本機(jī)int類型占用 %d 個字節(jié)\n", sizeof(int)); //得知本機(jī)上int類型占用多少字節(jié)for(index = 0; index < 3; index++){printf("第 %d 個元素的地址是 %x\n", index + 1, &number[index]);}//輸出數(shù)組中每一個元素的地址for(index = 0; index < 3; index++){printf("p加 %d 的值是 %x\n", index, p + index);}//輸出指針p+1, p+2, p+3的值return 0; }程序很簡單,目的就是為了說明指針p自己加上1、2、3分別得到什么值。運(yùn)行結(jié)果如下:
指針p的初始值就是數(shù)組第一個元素的地址,為“12ff70”。那么從p + 1開始,并不是簡單的12ff70 + 1 = 12ff71,而是12ff70 + 4 = 12ff74。p + 2也不是12ff70 + 2 = 12ff72,而是12ff70 + 4 + 4 =12ff78。所以指針的增加運(yùn)算與本文開頭的整型變量a的增加運(yùn)算還不一樣,這也是許多初學(xué)者經(jīng)常會糊涂的一個地方。
指針p +n其實計算的是p加上n*類型占用字節(jié)數(shù)。本文指針p是int類型,本機(jī)中,使用sizeof計算出的int占用的字節(jié)數(shù)是4。因此,p + 1其實就是p + 1 * 4個字節(jié),p + 2其實就是p + 2 * 4個字節(jié)。關(guān)于每種類型在本機(jī)上占用的字節(jié)數(shù)網(wǎng)上有很多介紹,讀者可以自行搜索下。
可能也有的朋友說,這個我懂啊,p + 1其實就是往前移動了4個字節(jié)啊!但是太自大也不好,太自大的結(jié)果就是你心里知道p + 1是跨越了4個字節(jié)的地址,但是手一抖,寫成了p + 4,你說這是筆誤呢還是筆誤呢?總結(jié)
以上是生活随笔為你收集整理的C语言的指针移动怎么理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西瓜直播弹幕阅读器 python
- 下一篇: HCNE知识点总结