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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【C语言】使用指针得到数组的最后一个数

發布時間:2025/3/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言】使用指针得到数组的最后一个数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

使用指向數組的指針,得到數組的最后一個數。

實現代碼

#include <stdio.h> int main() {int a[8] = {1, 2, 4, 8, 16, 32, 64, 128};int *p = (int*)(&a + 1);printf("%d\n", *(p - 1));return 0; }

結果:

128

合理性分析

比如說:

int m = 1;

則:
*m 由于m不是指針變量,所以不存在。
&m 是指向m的地址。
*&m 是指地址為&m的內存中存放的值,也就是m的值。

C語言的數組地址為其首元地址,每個元素地址都是其首地址。
比如一個長度為4的int數組,首元地址600000,第二個元素是600004,第三個元素是600008,最后一個元素是600012,數組地址范圍600000 ~ 600015,長16字節。
&a+1 表示了在數組首地址加上數組總長,上例則為600016。
同理,如果是&a+2 則表示600032,&+3 則為600048,……

int *p = (int*)(&a + 1);

上面的語句定義了一個int類型的指針,指向的位置是&a+1,上例的600016。
“相當于”是一個新的數組,此時600016成了首元,p-1則是倒著取一個元素,地址600012,p-2則是600008,……
*(p-1)對p-1地址的數據取出,得到的正是600012存的元素,即第四個元素,也是最后一個元素。

測試

#include <stdio.h> int main() {int a[8] = {1, 2, 4, 8, 16, 32, 64, 128};int *p = (int*)(&a + 1);printf("%d\n", a);printf("%d\n", &a[0]);printf("%d\n", *a);printf("%d\n", &a);printf("%d\n", (&a+1));printf("%d\n", (&a+2));printf("%d\n", (&a+3));printf("%d\n", p);printf("%d\n", (p - 1));printf("%d\n", (p - 2));printf("%d\n", *p);printf("%d\n", *(p - 1));return 0; }

執行結果:

6422000 6422000 1 6422000 6422032 6422064 6422096 6422032 6422028 6422024 7869392 128

反思

看不懂就說明還是不會C/C++的指針,以后要加強對這方面的理解。
這篇文章的大部分結論都來自于自己做測試得到的猜測,未必都準確,還望懂C/C++的讀者多多指教!

總結

以上是生活随笔為你收集整理的【C语言】使用指针得到数组的最后一个数的全部內容,希望文章能夠幫你解決所遇到的問題。

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