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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

让你不再害怕指针的应用-全程仿真+注解(第二部分数组)

發布時間:2024/4/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让你不再害怕指针的应用-全程仿真+注解(第二部分数组) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

讓你不再害怕指針的應用-全程仿真+注解(第二部分:數組)(持續更新)

寫此文章一是為了分享,二是為了溫習!

預計包含的內容為:變量如int? 、數組? 、結構體? 、枚舉 、聯合體、(這個自己也在了解)。

軟件:CODE::Blocks? ? ? Compiler:GCC5.1.0

寫第二部分就默認大家看了我寫的之前的文章,那我就直接闡述我的觀點和仿真結果!

重要的五句話:好好揣摩!

指針的值: 是它所指向對象的地址
?????????? 在指針前面使用*可以得到:指針所指向對象的值(簡稱:取內容)
?????????? 指針+1,指針的值遞增它所“指向類型”的大小
?????????? 數組的指針:指的是:數組的起始地址。
?????????? 數組元素的指針:指:數組元素的地。

?

把數組的地址 賦給指針變量 :該指針就指向該數組了!

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include<windows.h> int b = 0; int c ; int main() {int a[10] = {1,2,3,4,5,6,7,8,9,0};int *p_1,*p_2;p_1 = &a;//數組名就是改數組的首地址p_2 = &a[0];//取a的首地址,性質和上面一樣。printf("p_1= %d\n",*p_1);printf("p_2= %d\n",*p_2);printf("a= %d\n",a);printf("取內容p_1= %d\n",*p_1);printf("去內容p_2= %d\n",*p_2);getch(); }

結果:

總結:由上面上來講,取數組[0]的地址,取a的地址或者直接打印出來的都是一個地址,說明這三種方法都可以得到數組的地址!

為什么這么做呢?C Primer Plus書籍 有這么一句話我抄下來供閱讀一下!

指針提供一種以符號的形式使用地址的方法。因為計算機的硬件指令非常依賴地址,指針在某種程度上把程序員想要表達的指令以更接近機器的方式表達。所以使用指針更有效率!

那么你就會發現一個問題,如果指針*(p_1+1),*(p_1+1) 取出來的內容是什么呢?是不是亂碼還是自己想要的數據呢?

想要得到這個問題的答案,我們先看看指針(p_1+1),(p_1+1)打印出來的是什么呢?我還想表達另一個問題,故改了一下程序!

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include<windows.h> int b = 0; int c ; int main() {int a[3] = {1,2,3};double b[3] = {4,5,6};int *p_1;double *p_2;p_1 = &a;//數組名就是改數組的首地址p_2 = &b;printf("p_1= %d\n",(p_1));//打印數組的首地址printf("p_2= %d\n",(p_2));printf("p_1+1= %d\n",(p_1+1));//打印指針指向的下一個地址printf("p_2+1= %d\n",(p_2+1));getch(); }

結果:

結論p_1= 6356732 p_1+1= 6356736? p_1= 6356704? p_1+1= 6356712? ,一個int型的變量占用4個字節,一個double占用8個字節。之前是講過的,不再贅述。說明指針指向下一個地址是可以確定的,為什么p_1+1指向的地不是6356733呢?也加1呢?

這么高深的問題,C Primer Plu書籍 來給你解答:我們的系統地址是按字節編地址的,在C語言中,指針+1指的是增加一個儲存單元,int的儲存單元是4個字節,那么pointer+1也就指向下一儲存單元了。

這是為什么必須聲明的所指向對象類型的原因之一。只知道地址不夠,因為計算機要知道存儲對象需要多少字節(即使指針所指向的是標量變量,也要知道變量的類型,否則*poiner+1就無法正確取回地址上的值。

明白了這個指針+的問題,我們開始取數組里面的內容,并且改變數組里面的值。那不是輕而易舉,哈哈!看程序

#include <stdio.h> #include <stdlib.h> #include <conio.h> #include<windows.h> int b = 0; int c ; int main() {int a[3] = {1,2,3};//初始化數組double b[3] = {4,5,6};int *p_1;double *p_2;short i,j;p_1 = &a;//數組名就是改數組的首地址p_2 = &b;for(i=0;i<3;i++){*(p_1+i) = 100+(i*100);//循環修改數組元素的值}for(i=0;i<3;i++){*(p_2+i) = 400+(i*100);;//循環修改數組元素的值}for(i=0;i<3;i++){printf("p_1+%d= %d\n",i,*(p_1+i));//打印數組的數據}for(j=0;j<3;j++){printf("p_2+%d= %f\n",j,*(p_2+j));//打印數組的數據}getch(); }

結果:

最后我們了解數組的地址,和指向數組的指針的地址的遞增方式,并也會運用指針取內容,改變變量的值。等等等,我這邊沒有涉及到取地址,因為取地址不是很難理解。

&a? 取a的地址,這個地址指針可以指向這個地址;

哈哈,不難吧!

結語:

很多事情學會了就不難了,就比如初中生看小學的知識,高中看初中知識一樣!

寫文章,有很多不足之處,請體諒!我也是邊學別用!

?

總結

以上是生活随笔為你收集整理的让你不再害怕指针的应用-全程仿真+注解(第二部分数组)的全部內容,希望文章能夠幫你解決所遇到的問題。

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