1樓:非常可愛
c語言中*p=&a和p=&a只有一個區別就是指標初始化時間不同。
p=&a:p是1維指標;
*p=&a:p是2維指標;
p=&a示例:
inta;
int*p;
a=5;
p=&a;
printf("valueis:%d.",*p);
擴充套件資料*p=&a的使用
int a, b, c;
int **p;
a = 5;
b = 6;
c = 7;
p = (int **)malloc(el_**t * sizeof(int *));
*p = &a;
*(p + 1) = &b;
*(p + 2) = &c;
for(int i = 0; i < el_**t; i++)printf("value is : %d\n", **(p + i));
2樓:育知同創教育
總得來說沒區別,就是指標初始化的時間不同而已int *p = &a;//這裡p宣告的時候直接初始化它的值為變數a的地址
int *p;//宣告指標p,p的值不確定可能指向任何地址,p = &a;//顯示初始化使p指向a的地址
3樓:匿名使用者
如果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賦值。
4樓:匿名使用者
1.一般來說*p=&a的表示方法是錯的,*p=a和p=&a是正確的。
2.*p=a的意思:將a的值賦給p指標指向的地址的值;
3.p=&a的意思是:將a的地址賦給指標p;
4.區別:*p是一個值;p是一個地址;兩者完全不相同。
5.*代表著p指向的地址的值,簡單來說就是取值;&是取地址符號,取的是地址;p是指標,可以理解為所指向的值的地址,*p就是取p指標指向的地址的值,&a就是取a的地址。
5樓:匿名使用者
對於指標來說,
*p = a[0],表示向地址為p的記憶體區域賦值為a[0]。
p = a[0],把
變數p的值改為a[0],這個語句正常應用中是錯誤的。變數p的值為記憶體地址,這樣賦值會丟掉p原來指向的記憶體。
正確給記憶體地址賦值應該使用第一句。
6樓:天雨下凡
這樣問說明你對指標的概念還不清楚,以下兩種方式等價:
一、先宣告指標,再給指標賦值
int *p,a;
p=&a;
二、定義指標的同時給它賦值
int a,*p=&a; //這裡的*p可以解釋成int * p,int *表示p是指向int型變數的指標
7樓:匿名使用者
#include
int main()
8樓:平野律子
舉個例子吧: a是一個陣列,它在記憶體中的初始地址比如說是0x11111111(簡單假設),且a[0]的值是1,也就是說,記憶體0x11111111中儲存的值是1。 於是,&a[0]=0x11111111,a[0]=1。
int *p; p=&a[0]; 指標p會有一個自己的記憶體地址,通常佔用4個位元組(比如初始地址是0x22222222)。p的值是&a[0],也就是說從0x22222222開始,後面4個位元組中儲存的值是0x11111111。 *p的值就等於p所指向的記憶體地址中儲存的值,也就是a[0]。
所以*p等於1。 如果*p=&a[0]的話,很容易出問題。比如說int *p之後,p的初始值可能是0xcccccccc(debug版本)或者0x00000000(release版本)。
這個時候,如果你寫一句*p=&a[0]的話,將會把0xcccccccc或者0x00000000記憶體之後4個位元組的值變為0x11111111。 而0xcccccccc和0x00000000記憶體區通常是不可寫的,這樣就會報錯。採納哦
9樓:爵爺
在定義指標的同時讓指標指向某個地址 如int *p=&a;不能直接使用*p=&a; p=&a;代表的是讓p指向變數a的地址
10樓:百度使用者
*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。 第二個是讓p指向a的地址空間。*p的傎和a相等。
int a=2,*p; *p=&a; 列印*p應該是一個地址值,很長一串, p=&a; 打*p印結果會是2;
11樓:
有啊,*p是個指標,他儲存的是一個變數的地址。你把a[0]裡的資料賦給他,是儲存在那個變數中,不是在存*p中。另一個p是個變數,a[0]中的資料時存在p中
例如:int *p;
p=&b;
*p=a[0];
b==a[0] 值是放在b中
另一個是放在p中 ,不同的
c語言裡面指標,*p=&a和p=&a,有什麼區別
12樓:匿名使用者
如果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賦值。
13樓:匿名使用者
第一個p是指標的指標,第二個p是指標。
在c語言中,int *p,a; *p=&a,和p=&a有什麼區別?
14樓:天雨下凡
這樣問說明你對指標的概念還不清楚,以下兩種方式等價:
一、先宣告指標,再給指標賦值
int *p,a;
p=&a;
二、定義指標的同時給它賦值
int a,*p=&a; //這裡的*p可以解釋成int * p,int *表示p是指向int型變數的指標
15樓:匿名使用者
#include
int main()
{int *p,a=0xaa; //宣告 int指標
c語言中,p=&a和*p=&a有什麼區別
16樓:woshi菜鳥
p=&a,p的值是a的地址,
*p=&a,a的值是a的地址,
*是取內容符!!!
17樓:匿名使用者
inta;int*p=&a;相當於int*p;p=&a;記住就行了;除了定義的時候,其他時候*p(正常情況)只能等於內容(a的值);
18樓:薩好慕仝金
在定義指標的同時讓指標指向某個地址
如int
*p=&a;不能直接使用*p=&a;
p=&a;代表的是讓p指向變數a的地址
19樓:之飛蘭保岑
總得來說沒區別,就是指標初始化的時間不同而已int*p
=&a;//這裡p宣告的時候直接初始化它的值為變數a的地址int*p;//宣告指標p,p的值不確定可能指向任何地址,p=&a;//顯示初始化使p指向a的地址
20樓:狄廣英勤璧
*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。
第二個是讓p指向a的地址空間。*p的傎和a相等。
inta=2,*p;
*p=&a;
列印*p應該是一個地址值,很長一串,
p=&a;
打*p印結果會是2;
c語言中*p=a與*p=&a有什麼區別
21樓:清鵬之
讓我來綜合一下吧
在定義的時候
int *p=&a; 是等同於 int=*p; p=&a;的。該形式只在定義的時候是正確的。就是指標p所指向地址的內容為a的內容。
如果不是定義的時候
*p=&a; 就是它字元的那個意思,就是指標p所指向地址的內容為a的地址。
dev c++試了下
————————————————————————————————————
「*p」表示地址為p儲存單元的內容;「p」表示地址;「&a」表示取a的地址;a為變數。
int *p;//初始化指標,但是該指標無指向地址!如果直接使用會有問題。
int *p=&a;//初始化指標,該形式只在定義時正確,表示以p指標所指向地址的值為變數a的值。
p=&a;//表示指標p所指向的地址就是a的地址。即地址間的賦值。
*p=a;//表示指標p所指向地址的內容就是內容a。
在c中,指標一定要初始化,指標加1指的是增加一個儲存單元。對陣列而言,這意味著把加1後的地址是下一個元素的地址,而不是下一個位元組的地址,這是為什麼必須宣告指標所指向物件型別的原因之一。
22樓:匿名使用者
首先來說一下*和&,為了便於理解你可以認為,這裡*是取內容,&是取地址。
我不討論它們的區別,因為*p=&a這個形式一般是錯的,常用的是p=&a。
下面比較*p=a和p=&a。看圖,圖很詳細。
顯然它們是等價的。
然後比較*p=&a和p=&a;
則這兩種都是對指標變數的賦值,賦值有兩種形式
①先定義後賦值
int a=3,*p;(定義指標變數*p)
p=&a;(對指標變數取地址)
②定義變數的同時賦值
int a=3,*p=&a
也就是說在賦值時,
int *p=&a
相當於int *p,
p=&a
它們的區別其實就是
int *p=&a是同時定義*p並對賦值p(即a的地址賦給p),而p=&a,只是對p賦值,沒有定義指標變數。
但要注意,只有在同時定義賦值時「*p=&a」這種寫法才是對的
其他情況下不要用*p=&a,這種形式,因為根本就不對,如下圖。我之前一直的疑問是為什麼賦值時*p=&a就不算錯了?後來老師給的解釋是這種形式只有在上面那種情況下成立,其他的情況確實都是錯的。
23樓:沉睡的羅羅塔
*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。 第二個是讓p指向a的地址空間。*p的傎和a相等。
int a=2,*p; *p=&a; 列印*p應該是一個地址值,很長一串, p=&a; 打*p印結果會是2;
對於指標來說,
*p = a[0],表示向地址為p的記憶體區域賦值為a[0]。
p = a[0],把變數p的值改為a[0],這個語句正常應用中是錯誤的。變數p的值為記憶體地址,這樣賦值會丟掉p原來指向的記憶體。
24樓:幻想祕境
*p=a是將a的值給p指標指向的地址的值
*p=&a是將a的地址給p指標指向的地址的值
*p=&a,*p=a和p=&a各是什麼意思,有什麼區別?
25樓:匿名使用者
表示式的意思:
1、*p=a的意思:將a的值賦給p指標指向的地址的值;
2、p=&a的意思是:將a的地址賦給指標p;
3、*p=&a的用法錯誤。
區別在於:
p=&a就是用a的地址對p賦值,a是一個變數,&a就是儲存這個變數的記憶體地址,指標儲存的就是一個地址,*p就是這一地址中的內容。
擴充套件資料另類*和&
兩個地方要注意: 在程式宣告變數的時候的*,只是表明「它是一個無符號整數,這個整數指向某個記憶體地址,一次訪問sizeof(type)長度」。這點不要和(*)操作符混淆;
在c++程式宣告變數的時候的&,只是表明「它是一個引用,這個引用宣告時不開闢新空間,它在記憶體分配表加入新的一行,該行記憶體地址等於和呼叫時傳入的對應引數記憶體地址」。
這點不要和(*)宣告符,(&)操作符混淆。
c語言中ltgt和有什麼區別C語言中和有什麼區別
舉例說明 例如你使用的是turboc include 代表編譯時直接在turboc軟體設定指定的路徑 預設是turboc所在資料夾下的include資料夾 中尋找裡面是否有stdlib.h的庫檔案。如果有,直接載入 如果沒有,報錯 無法找到庫檔案 include stdlib.h 代表編譯時先尋找你...
C語言中p a就是指標p指向變數a的地址嗎
那要看是什麼情況了,如果是定義的時候賦值就是把a的地址賦給p如 int a int p a 如果不是初始化就是把a的地址賦給p裡儲存的地址,如 int a int b int p p b p指向b的地址 p a 讓b存著a的地址執行結果如下 第二項試圖將a的地址放在p指向的b裡,因為b是 int 而...
c語言的m 和 m,C語言中,M 和 M有什麼區別,舉個例子
輸出的值 bai是 1010 因為du 系統是先計算 zhim 值為dao10 然後m變為9 專再計算 m m的值先變為10再取值 的值為10由於中間沒有空格,屬所以,int m 10 printf d d m,m 就是輸出 1010 11,11 m是先自加,所以是11 m 是後自減,先返回原值11...