1樓:匿名使用者
指標本質就是儲存記憶體地址的一個變數。所以指標可以指向某個變數在記憶體中儲存的單元格嘛。變數去訪問單元格最後也是編譯器通過變數名和地址一一對應去查詢的。
而指標裡面直接儲存的就是地址,所以直接可以訪問地址所對應的單元格。
不知道樓主說的是說明情況。所以幾種可能的都說一下:
測試**
#include "stdio.h"
#include "conio.h"
main()
int *p=&a ; 這是很標準的,把a的地址個p指標變數。
int *q;q=&a;這也是很標準的。定義一個指標變數,然後將a的地址賦值給她。
int *r; *r=&a; 首先r是個指標變數,但是r指向記憶體中那個單元格呢?r沒有賦初值就開始用了。這是很嚴重的。
r是個遊離態的指標。 *r表示取出r對應的那個地址中的值。r都沒有指向一個具體的單元格,如何去取值啊。
2樓:冰水清清藍
int *p中其一般形式為:
型別說明符 *變數名;
其中,*表示這是一個指標變數,變數名即為定義的指標變數名,型別說明符表示本指標變數所指向的變數的資料型別。
例如: int *p1;
表示p1是一個指標變數,它的值是某個整型變數的地址。或者說p1指向一個整型變數。至於p1究竟指向哪一個整型變數,應由向p1賦予的地址來決定。
p就是地址。*p是一個指標型變數 *p=&a錯誤
3樓:匿名使用者
p=&a 是將變數a的地址賦給指標p本身的儲存單元
*p=&a 是將a的地址賦給指標p所指向的記憶體單元
第二種由於沒有對指標初始化,*p不知道指向什麼單元(有可能是重要的系統單元),所以這樣的操作很危險。
4樓:十面埋伏炸
不相同,p是指該指標的地址,向它賦值是將p指向另一個地址,而*p是指向p地址的指標,它是可以直接賦值的。希望可以幫助你~~~
5樓:好好學技術
p=&a,表示p指向a ,所以p的值為1
*p=&a,是把a的地址的值給*p,p值是不同的
「int **p」和「int *p」有什麼區別?
6樓:怕不他啊不了
int *p表示的是一級指標,表示p所指向的地址裡面存放的是一個int型別的值。
int **p表示的是二級指標,表示p所指向的地址裡面存放的是一個指向int型別的指標。
一級指標存放變數的地址,指向的值是變數的內容。如int* p=, p=陣列的首地址,*p=陣列的第一個值;
二級指標存放一級指標的地址,指向一級指標。如int*p =, int**pp=&p,pp=指標p的首地址,*pp=陣列的首地址,**pp=陣列第一個值1。
指標陣列的陣列名傳遞引數對應為指標的指標即二級指標,二維陣列的陣列名傳遞引數對應為陣列指標即指向一維陣列的指標
一級指標通過形參,可以修改實參中指標所指向的地址中的值。修改不了實參中指標所指向的地址。需要藉助二級指標才可以。
7樓:尉詩桃牟畫
int*p
:一級指標,表示p所指向的地址裡面存放的是一個int型別的值int**p
:二級指標,表示p所指向的地址裡面存放的是一個指向int型別的指標(即p指向的地址裡面存放的是一個指向int的一級指標)
例如:int
i=10;
//定義了一個整型變數
int*p=&i;
//定義了一個指標指向這個變數
int**p1=&p;
//定義了一個二級指標指向p指標
那麼取出10的值方式為:
printf("i=[%d]\n",*p);
printf("i=[%d]\n",**p1);
在c語言中,int *p,a; *p=&a,和p=&a有什麼區別?
8樓:天雨下凡
這樣問說明你對指標的概念還不清楚,以下兩種方式等價:
一、先宣告指標,再給指標賦值
int *p,a;
p=&a;
二、定義指標的同時給它賦值
int a,*p=&a; //這裡的*p可以解釋成int * p,int *表示p是指向int型變數的指標
9樓:匿名使用者
#include
int main()
{int *p,a=0xaa; //宣告 int指標
c語言中,定義int型變數a指標*p,那麼,*p=&a和p=&a是什麼區別?
10樓:匿名使用者
只能int *p=&a或者int *p;p=&a;
11樓:匿名使用者
定義int型別變數a和指標*p,則指標p存的是一個int型變數的地址,即可以表達為:p = &a;
*p存的是int型變數的指,即p指標指向地址的內容,所以可*p = a; 當你用*p = &a時,編譯器會認為指標的值表示了地址,編譯報錯。如果你真想這樣表示,也可以,只需要將地址強轉為int型,即
*p = (int)&a;
12樓:天河宙
你要先int *p然後才能p=&a
13樓:匿名使用者
p是地址 &a是地址,*p是p地址對應的值
14樓:白花戀歌
去看 c和指標 這本書,有非常詳細的關於指標的幾乎所有的問題,&a表示取變數a的地址,根據宣告,*p表示訪問指標所得到的整形變數,一般情況下地址不能賦值給整形變數,如果非要這麼做,只能使用強制型別轉換
15樓:匿名使用者
*p 是錯的。。。。
c語言中int*p=a與int*p=&a有什麼區別???求大俠幫忙!!!
16樓:匿名使用者
區別很大。第一個int *p = a;這是把a給一個指標,一般a是指標或陣列,否則可能會造成很大錯誤。
int *p = &a;這是把a的地址給p,一般a可以是一個整型變數。
17樓:匿名使用者
因為p為指標變數,它初始化的值只能為地址,例如:
int b[10],a;
int *p1=b,*p2=&a; //這兩種賦值都可以,注意,a,b都是地址,b是陣列名,為陣列的首地址,
若如下定義就是錯誤的:
int *p3=a;//a是簡單變數,不是地址,而是值,型別不匹配,所以錯了
18樓:步行者
int*p=a,首先a是一個指標,然後定義一個int型指標p,指向a
int*p=&a ,首先a是一個數值(比如之前定義它 int a=100),那麼在定一個指標p,指向a=100中a的記憶體地址
注意兩個式子放在一塊寫是錯誤的。不可能定義a為指標,又為數值
19樓:匿名使用者
int *p是定義一個指標 對應的該是地址
int*p=&a 則a是個指標或陣列
int*p=&a 則a是個資料
20樓:匿名使用者
區別很大,第一個是把a賦給指標變數p,a變數必須存放的是指標值;第二條語句是把a變更本身的記憶體地址拿出來,賦值給指標變數p。
21樓:
a的型別不一樣,第一個要指標型別的int變數,第二個是普通變數
22樓:匿名使用者
第一個a必須也是指標才能對吧,第二個指向了a的地址。
23樓:浦小雨漆娜
*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。
第二個是讓p指向a的地址空間。*p的傎和a相等。
inta=2,*p;
*p=&a;
列印*p應該是一個地址值,很長一串,
p=&a;
打*p印結果會是2;
c語言裡面指標,*p=&a和p=&a,有什麼區別
24樓:匿名使用者
如果a都是基礎型別, 而不是指標, 比如a為int那麼 p=&a, 是把a的地址
,賦值給p, p需要是int *型別。
而*p=&a 是把a的地址賦值給*p, p需要是int **型別。
注意 如果是int *p=&a;這種形式
是定義int *型別的p, 並給p初始化為&a。 等效於int *p;
p=&a;
還是給p賦值,而不是給*p賦值。
25樓:匿名使用者
第一個p是指標的指標,第二個p是指標。
inta01f輸出什麼,c語言中inta1,b2,cc10ba輸出結果為什麼
chenqin231 已經回答得非常棒了,0.1f這個值會被截斷,取其整數部分,所以,列印a值為0,希望能對你有所幫助,另外,建議你讀一些c語言方面的基礎書籍。a的值被截斷,當你用printf列印a值為0 應為 0 但是0.1f是float型別,前面應該有 int main int f int in...
c語言中int a 1,b 3 switch a bcase 1 printfncase 2 1 printfn 對麼?詳解
include int main 這是我自己理解之後寫的,switch語句中case後要加break,case的所有情況寫完後還要加default語句,表示除 內case外的情況發生容時要怎麼做。本程式就沒有等於a b的情況,需要default語句。case 1 printf n break 分號後...
c語言中,inta 3,b 2,c 1,為什麼賦值語句a b c 1錯誤了
賦值語句沒有錯,錯的應該是變數的說明語句 inta 3應該在變數與型別說明符間加空格以示區別 int a 3,b 2,c 1 沒有錯啊。include int main inta 3 這個連起來寫已經錯了。當然,排除你是筆誤。a b c 1,是合法的。沒有錯誤。在vs 2010中可以編譯通過。因為a...