在學習任何知識之前,我們都要知道這個知識是什么東西,那么我們這次要學習的指標是什么呢?
說到指標,我們的第一反映是什么


會不會有人跟我一樣,想到是這種有指示作用的指示牌,同樣C語言當中的指標也是這樣的,
其實在我看來C語言的環境就是地球的環境,我們就是一個個變數,地球就是存盤器,我們在這里面游蕩,我們怎么證明我們活過呢?那就是你現在所處的地方,你在這個地方,就好像一個變數出現在這里進行了一次運算,這個變數來過,這個我,活過,
因為代碼與人生的相似性,讓我深深迷戀,
話說回來,那么指標的作用就是證明這個地方有你,可以說,指標就是地址,地址就是指標,
那我們來看看一段代碼:
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("%d", a + b);
return 0;
}
這段代碼大家應該都比較熟悉吧,就是一個簡單的加法,那此時我們想知道這個a在哪里,我們應該怎么辦呢?正如我們之前說的指標證明著這個變數來過,
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int* pa = &a;
printf("%d\n", a + b);
printf("%p", pa);
return 0;
}
當你運行這個代碼的時候你可以看到兩個輸出,一個是加法之后的答案,一個就是變數a所在的地方,比如我現在在寢室,那么我的指標就是某某大學某某幢某某寢室,這個就是指標,* 這個符號就是用來標識,這個變數是指標,& 這個符號就是提取地址的一個符號,
我們都知道,一個事物的存在一定有他的道理,那這個道理是什么呢?首先,指標很快,很方便,這個是我老師告訴我的,我同樣也在消化,然后我接觸了一些代碼,
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int* pa = &a;
int* pb = &b;
printf("%d\n", a + b);
printf("%d", *pa+*pb);
return 0;
}
當我們運行這個代碼的時候,我們發現,兩個答案都一樣,是30;那為什么呢?* 這個符號不是用來標識的嗎?其實這個符號有另一個作用,我們這么想,我們買快遞的時候是不是有那么幾個步驟,貨源發送,快遞員依據地址送到你家,之后你是不是利用工具拆開快遞,同樣當我們的pa(pb)指標變數(快遞員)利用&這個符號知道了變數a(b)的地址,然后把快遞送過去之后,a(b)這個人利用 * 這個工具拆開了快遞來使用,
這個就是變數全部經過的解釋,
那很多人一定和我一樣很困惑,不對呀,我們一開始只要寫a+b就好了,現在你這個指標變數一來,我要寫*pa+*pb這么多東西,我吃飽了撐的?其實這個遠遠不是指標應該做的事情,
我們看下一個代碼:
void exchange(int a, int b)
{
a = b;
}
int main()
{
int a = 10;
exchange(a, 5);
printf("%d", a);
return 0;
}
我這個代碼是利用exchange這個自定義函式,來改變a這里面的值,大家覺得這個代碼對不對,
你運行之后就會發現,這個代碼是不正確的,你輸出的還是原來的值,我們這么想,你爸爸讓你去接你弟弟放學,然后你去網吧呆了一個晚上,等你回家之后,你爸爸問你,昨晚去哪了,你說你去網吧了,造成這個原因的是什么,我們接受到了接弟弟回家這個訊息,但是我們沒有弟弟學校的地址,我們是不是找不到弟弟,也接不回來,同樣,我們在這個代碼里面,我們要改變里面的值,我們應該怎么辦,我們是不是要傳地址,
學到之后我們就知道了,這個是形參不改變實參的值,現在我們只要知道接弟弟的這個列子,
那我們正確的代碼是什么呢?
我們思考一下,是不是應該在傳的時候我們應該傳的是地址,那我們之前知道的,獲取地址的符號是什么?是不是 & 這個符號,
那我們在傳的時候就應該寫成
exchange(&a, 5);
這樣子我們就把這個變數的地址傳過去了,我們也知道了弟弟的地址,
那我們的函式在接收的時候,是不是應該做到,變數的屬性一致的原則,
void exchange(int *a, int b)
之前這個函式就應該被改變了,
那我們在函式里面是不是也應該改一下,
void exchange(int *a, int b)
{
*a = b;
}
到這之后我們的代碼就算是全部改完了
#include<stdio.h>
void exchange(int *a, int b)
{
*a = b;
}
int main()
{
int a = 10;
exchange(&a, 5);
printf("%d", a);
return 0;
}
以上只是代碼很基礎的一部分,我只是希望大家先理解代碼是什么東西,之后還會有跟進,
如果還有不知道的可以私信,我看到之后會盡量回復的,
我希望和大家一起進步,謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287339.html
標籤:其他
下一篇:新人報道,從護理轉IT心理歷程
