程式設計師面試寶典(第5版)第五版:程式設計師面試寶典(第5版)第五版
剛學習c語言的朋友,對指標「移動」可能不太理解。舉個例子,例如下述**:
int a = 1;
int *p = 1;
p + 1還是2嗎?
為了說明問題,請看以下**:
#include "stdio.h"
#include "stdlib.h"
int main()
; //定義乙個整型陣列
int *p = &number[0]; //指標p的初始值是陣列第乙個元素的位址
printf("p的值是 %x\n", p); //輸出p的值,也就是陣列第乙個元素的位址
printf("本機int型別占用 %d 個位元組\n", sizeof(int)); //得知本機上int型別占用多少位元組
for(index = 0; index < 3; index++)
//輸出陣列中每乙個元素的位址
for(index = 0; index < 3; index++)
//輸出指標p+1, p+2, p+3的值
return 0;
}
程式很簡單,目的就是為了說明指標p自己加上1、2、3分別得到什麼值。執行結果如下:
指標p的初始值就是陣列第乙個元素的位址,為「12ff70」。那麼從p + 1開始,並不是簡單的12ff70 + 1 = 12ff71,而是12ff70 + 4 = 12ff74。p + 2也不是12ff70 + 2 = 12ff72,而是12ff70 + 4 + 4 =12ff78。所以指標的增加運算與本文開頭的整型變數a的增加運算還不一樣,這也是許多初學者經常會糊塗的乙個地方。
指標p +n其實計算的是p加上n*型別占用位元組數。本文指標p是int型別,本機中,使用sizeof計算出的int占用的位元組數是4。因此,p + 1其實就是p + 1 * 4個位元組,p + 2其實就是p + 2 * 4個位元組。關於每種型別在本機上占用的位元組數網上有很多介紹,讀者可以自行搜尋下。
可能也有的朋友說,這個我懂啊,p + 1其實就是往前移動了4個位元組啊!但是太自大也不好,太自大的結果就是你心裡知道p + 1是跨越了4個位元組的位址,但是手一抖,寫成了p + 4,你說這是筆誤呢還是筆誤呢?
C語言的指標移動怎麼理解
剛學習c語言的朋友,對指標 移動 可能不太理解。舉個例子,例如下述 int a 1 int p 1 p 1還是2嗎?為了說明問題,請看以下 include stdio.h include stdlib.h int main 定義乙個整型陣列 int p number 0 指標p的初始值是陣列第乙個元...
C語言指標的理解
什麼是指標?指標也是一種變數,存放的是某塊記憶體的位址。我們知道,記憶體可以理解為是按位元組被分割成若干塊的,每一位元組都對應著乙個編號,並且這些編號從小到大依次排列,這個編號就是它的位址,獨一無二,而指標變數中的值就是這些編號 例如如下 的結果 include include int main 這...
C語言指標的理解
include intmain int p1 2 p2 2 p3,p4,p5 宣告2個陣列指標,和3個普通指標 p1 arr 記住p1是陣列指標,是指向陣列的 printf d n p1 0 輸出陣列裡的第乙個元素 p1 指標自增,自增按陣列單位自增,這裡看成一維陣列的話,乙個陣列單位就是3,相當於...