日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

指针(二)

發布時間:2025/4/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指针(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上次對指針進行了初步認識,接下來,繼續挖掘C語言的 指針與一維數組: 這時編譯是沒有問題的: 編譯: 輸出結果: 這里面會有點繞,但很重要,先運行一段程序,再來闡述上面的觀點: #include <stdio.h>int main(void) {int a[] = {1, 2, 3, 4, 5};int* p = a;printf("%p\n", a);printf("%p\n", &a);printf("%p\n", a+1);printf("%p\n", &a+1);return 0; }

運行結果:

結果 a+1 和 &a+1 輸出不一樣,這時怎么回事呢,且聽我慢慢分析:

因為a表示int*,是一個int類型的指針,所以a+1偏移的是一個元素是一個int類型,既4個字節,所以0xbff7f218 + 0x4變成了0xbff7f22c。

&a表示指向數據變量的指針(數組指針),所以&a+1偏移的一個元素是一個數組int[5]類型,既20個字節: 所以0xbff7f218 + 0x14變成了9xbff2f22c

記住:上面提到了數組指針,下面對其進行一個介紹,注意下面兩個區別 數組指針: int (*p)[5] 這里的p是一個指針,指向一個具有5個元素的數組指針 指針數組: int *p[5] 這里的p是一個數組,數組中的元素類型是int* 接著用程序驗證一下上面指出的理論: 編譯一下,出錯了: 再改編一下: 這時編譯,則成功了: 注意以下意圖表示“數組指針”的方法: 編譯: 理解了上面的東西,下面以一個例子,以多種方式來打印數組的元素(理解這段程序的前提,需理解上面所學到的): #include <stdio.h>int main(void) {int a[5] = {1, 2, 3, 4, 5};int i;int* p;for (i=0; i<5; i++){printf("a[%d]=%d, *(a+%d)=%d\n", i, a[i], i, *(a+i));printf("&a[%d]=%p, a+%d=%p\n", i, &a[i], i, a+i);}//以指針的方式打印元素for (p=a; p<a+5; p++){printf("address:%p, value:%d\n", p, *p);}return 0; }

輸出結果:

指針與二維數組: 這里面比較繞,一一分析來理解: (回顧) 對于一維數組int a[3]; 數組名a可以看成是一個常量指針,類型相當于int*,也就是一個整型指針。 對于二維數組int a[3][4]: 數組名a可以看成是一個常量指針,類型相當于int (*p)[4],也就是數組指針。 而a[2]的類型是int*;a[2] + 2仍然是一個指針。 所以*(a[2] + 2)的類型就是一個int類型。 對于上圖中的表示方法有很多,理解性去記性。 下面通過一個例子,來綜合使用二維數組的用法: #include <stdio.h>int main(void) {int a[4][3] = {{1, 2, 3}, {4, 5, 6},{7, 8, 9}, {10, 11, 12}};int (*p)[3] = a;int i, j;//打印第一行的元素for (i=0, j=0; j<3; j++){printf("%d\t", *(*p+j));}putchar('\n');//打印第二行的元素for (i=1, j=0; j<3; j++){printf("%d\t", *(p[i]+j));}putchar('\n');//打印第三行的元素for (i=2, j=0; j<3; j++){printf("%d\t", (*(p+i))[j]);}putchar('\n');//打印第四行的元素for (i=3, j=0; j<3; j++){printf("%d\t", *(&p[0][0]+i*3+j));}putchar('\n');//打印第四行的元素,變形for (i=3, j=0; j<3; j++){printf("%d\t", (&p[0][0])[i*3+j]);}putchar('\n');return 0; }

運行結果:

為了更好的理解二維數組,下面用程序來分解下: 看運行結果: 也就是:0xbff31ccc + 0xc = 0xbff31cd8 好了,關于指針與數組這一塊的內容就學到這,下回繼續探索指針!!

轉載于:https://www.cnblogs.com/webor2006/p/3463918.html

總結

以上是生活随笔為你收集整理的指针(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。