有兩個我認為值得分析的指標例程,希望大家看了能對大家有幫助
eg1:
#include
int main() ;
int *p1 = (int *)(&a+1);
int * p2 = (int *)((int)a+1);
int * p3 = (int *)(a+1);
printf("%d,%d,%d\n",p1[-1],p2[0],p3[1]);
return 0; }
這是第乙個例程,編譯之後,執行,會列印什麼結果呢?
後面會給出答案,但這裡希望大家停下來思考,再去看後面的答案.
分析:
p1:&a為整個陣列a的位址,&a+1就直接指到陣列a的最末端了,然後我們我們再(int *)(&a+1),這樣就把指向陣列最末端的指標強制轉換成int型的指標,這樣,後面的列印p1[-1]就是指標向前移動乙個int型的距離,直接指到a陣列的最後乙個元素了,故列印出來是4;
p2:a為陣列元素首位址,所以(int)a就是將首位址強制型別轉換為int型,再加1,就是將指標指到從第乙個元素位址的第二個位元組開始取乙個int型的數字,也就是0x0200 0000了.
p3:a為第乙個元素的首位址,所以a+1就是第二個元素的首位址,所以p3指向a[1],p3[1]就是a[2]了,就是為3.
eg2:
#include
void f(int a[10000])
int main() ;
f(a);
return 0; }
直接編譯執行,這個列印會是什麼呢?
這個列印4,我第一反應就是sizeof(a),應該列印4*10000=40000啊,可是我最後才知道編譯器編譯的時候,會將a[10000]替換為void f(int *a),這個例程很簡單,因為我第一反應是出錯了,所以我拿出來在這提醒下自己.
C語言 指標例程 《C和指標》例程6 3 注釋
c和指標 的107頁 程式6.3 在一組字串中查詢 版本2 程式如下 include include define true 1 define false 0 intfind char char strings,char value 1 strings 5 return false int main...
指標 指標的指標和陣列操作例程
include include include int main printf the data in pimg for int i 0 i 4 i pointer of pointer byte ppimg int k 4 ppimg new byte 2 for int i 0 i 2 i fo...
C 函式過載例程
1 include2 using namespace std 3 int square int x 4 float square float y 5 double square double x 6 int main 7 13 14 15 int square int x 16 17 cout fi...