-
1 # 熙爸愛釣魚
-
2 # 希顏之士
指標即地址。所以您的問題問的不對。
我所理解的應該是想問為什麼變數需要取地址以後再賦值給指標變數,即int a,*p; p=&a;
先講個小概念,數字23,在“今年我23歲了”這句話中23的語義是年齡;在“我的偶像身穿23號籃球服”這句話中23是籃球服的編號。也就是說數字23在不同的語句環境中語義不一樣。
迴歸正題,int a,*p; p=&a; 在這裡我們定義了兩個整形變數,在記憶體中他們都存放的是二進位制編碼,但是他們的語義是不一樣的,一個用來存放整數,一個卻是用來存放指向一個整形變數的指標(指標即地址)。簡單說這兩個變數可不一樣,一個是普通變數存放常用的數值,一個是特殊變數(所以還要加個*號區分一下)存放另外一個變數的物理地址。
-
3 # 前沿學習分享
地址就是指標,而平時大家說的“指標”都是指標變數的簡稱(大家的習慣罷了),指標變數就是用來儲存指標的變數。
打個比方,普通變數就是個“人”,擁有實體可以做很多事情;而指標變數就是個“鬼魂”,沒有實體做不了事情,只有在附身一個“人”之後才能做事情。
-
4 # 繁星落石
地址在C語言裡面的儲存也需要一個數據型別,如果只是儲存內容的話,十六進位制int是滿足要求的,可以儲存一個32位數。但是對於編譯器而言,如果它的型別是int,那麼它就是一個數字,而只有指標型別才表示變數儲存內容是一個地址。
這個規定是編譯器決定的,否則的話地址和一個32位數(64位系統上為64位數)沒有任何區別。
-
5 # Zacharyyy
指標變數是有型別的,所以如果是透過malloc出來的地址是都是要透過強轉成對應的指標型別,如:int *p = (int *) malloc (sizeof(int))
-
6 # 密碼一點通
這其實是為了區分地址和地址指向的值的一種方法。指標好比是一個盒子。盒子裡面裝的東西就是值,盒子裡的東西是可以換的
-
7 # 三把拍子
理論上講,地址可以直接賦值給指標變數的,因為指標變數的內容就是地址。您說的要轉換成指標,應該是為了消除編譯告警。
-
8 # 散居獵人
地址是門牌號。
指標是登記本上的門牌號。
房子早就蓋好了,門牌號是固定的。
登記本是管理用的,隨時可填寫修改。
你住賓館,你的名字就是變數名,你本人就是變數值,房間號就是地址,戶型就是變數型別,客戶登記本就是記憶體管理,你就在某一條內容上。
這麼簡單普通的問題一直被問,是教材問題還是老師問題?!
-
9 # 源棋
首先,我剛開始C語言時,也和你有過同樣的問題,要定址的地址是用一個數值表示的,但是為什麼要變成指標才能對指標變數賦值呢?
下面讓我來分析一下我當時是怎麼理解的這個難點,主要從以下三個方面進行分析:C語言是強型別語言、什麼是指標、定址的地址怎麼表示?
第一點:我們要知道是C語言是強型別語言。因為C語言是強型別語言,也就導致我們要對兩種不同資料型別的進行運算時,C語言對運算結果進行型別轉換,將小型別的資料轉換成大型別的資料,然後再進行運算。在C語言中型別轉換有隱式轉換和顯示(強制)型別轉換。
例如:
int a;
float s;
a =(int)s;
丄例就是強制型別轉換的一種表現形式,對於強制型別轉換這種轉換形式來說,在轉換時會對最終的數值大小產生影響。
例如:
float a=100;
上式就表示了一種一種隱式的資料型別轉換,浮點型別的變數a被賦值了一個整形資料。
第二點:指標在C語言中是一個很抽象的概念,指標也是一種資料型別,指標因為具有高度靈活性,能夠直接操作記憶體,所以說對指標的熟練運用,能看出一個程式設計師水平的高低。
我們在使用一個指標時,始終要秉持的一個觀點就是:指標就是一個記憶體區域地址,而指標型別則表示了這個記憶體區域的大小,而儲存指標的變數就是指標變數。第三點:在C語言中,我們需要對記憶體地址進行定址,在對地址進行表示時,為了方便常用十六進位制數對地址表示,而在C語言中十六進位制的數值,其實就是一個整型資料,而指標也是一種資料型別,在進行賦值時,就需要對其進行轉換。
所以說對不同型別的變數或者數值在運算時需要進行轉換。
希望可以幫到您!
-
10 # 使用者9022040290298
C語言是什麼我不全懂,只能用我我所理解的語言來回答這個問題,地址是固定的,不變的。指標。從字面來解釋:代表方向,起始。
-
11 # 問牛之人
這個問題問的感覺邏輯上有點問題。
地址,就是記憶體地址,也可以用指標這個詞去表徵,意思就是可以認為指標是地址的代名詞或者別名。
指標變數是一個開發需要自定義的各種變數的一種,也只有這種變數的內定格式是可以滿足存放地址這種資料的。其他型別的變數也可以放地址,但放進去的地址未必在型別轉換後正確
-
12 # 春華秋實4398113461197
在c語言中,先定義變數,才能再賦值使用。指標變數也是資料型別,所以要先定義,再使用。在資料型別中,唯有指標變數是存放地址的。在使用指標變數時,也必須先定義再使用,而不同資料型別存放的地址變數也不同。所以才有int *p這樣的寫法。它的含義就是p是存放資料型別是整型的變數的地址的。其它型別的變數地址不能放在p中。普通變數定義時沒有指明地址,要獲取它的地址必須用&符號,即&a,表示獲取變數a的地址。這樣才能把a的地址賦予指標變數,即int a,int *p,p=&a.因此,沒有前面的指標變數的定義,是不能有後面的p=&a這個結果的。
-
13 # 自駕遊狂徒
地址可以直接賦值給指標變數的
譬如 int *p = 0x01020304
這裡的0x01020304可以看成32位機的記憶體地址。
又譬如 int a = 123;
int *p = &a; 則&a就是取到了a這個變數的地址。 就是直接賦值給了指標變數p
-
14 # 想一想昨天
這個題目有點意思,在c語言中,指標就是存放地址的值,如int a=10;int *p=&a;這裡p中就是存放變數a的地址。
回覆列表
指標是用於儲存記憶體地址的一種變數;可以直接把地址賦值給指標,如:
int * ptr = (int *)1234;
前提是地址明確且不變,否則非常危險,極易導致越界訪問,除非你有充足的理由這麼做;
取變數地址賦值給指標也是一個意思,因為變數地址在執行時才能確定,所以取變數地址是動態的且安全的;