1樓:自我程式設計
在陣列中,陣列名錶示首地址常量。a等同於&a[0]。所以p=a。就是p指向a首地址。
p=&a是錯的,a已經是地址裡。
可以寫p=&a[0]。
2樓:天天向上知識店鋪
如果已定義int a[5],定義指標變數int *p,那麼請問p=a這意思是p指標指向a陣列的首地址,相當於p=&a[0]。
p=&a的寫法是錯的。因為a陣列的陣列名本來就是a陣列的首地址,地址屬於常量,常量不允許再取地址。
3樓:天空沒蜻
有了int a[5],*p;,p=&a;顯然就是錯誤的。int a[5],*p;說明了a和p都是int *型指標,只是a是常指標,p是指標變數,那麼p=a;就合情合理;&a是指向a[5]的指標,與它型別匹配的是int (*)[5],而不是int *。所以p=&a;的等號兩邊型別不匹配,編譯都過不了……
4樓:匿名使用者
隱式轉換和顯式轉換的區別。
編譯器遇到一維陣列名取值時,按以下順序處理:
當有&符號時,取地址(如果陣列名後面有索引 [n] 則取n元素的地址,否則取首地址)
當有*符號時,取值(元素為指標)
預設情況下,視作帶&,即取地址(隱式轉換)。
5樓:匿名使用者
// 沒啥區別,都一樣的。
#include
int main()
你看看輸出結果:
a = 0x7ffecb6b8770
&a = 0x7ffecb6b8770
p = 0x7ffecb6b8770
q = 0x7ffecb6b8770
6樓:匿名使用者
沒啥區別, a和&a都是陣列的首地址
c語言中,定義int型變數a指標*p,那麼,*p=&a和p=&a是什麼區別?
7樓:匿名使用者
只能int *p=&a或者int *p;p=&a;
8樓:匿名使用者
定義int型別變數a和指標*p,則指標p存的是一個int型變數的地址,即可以表達為:p = &a;
*p存的是int型變數的指,即p指標指向地址的內容,所以可*p = a; 當你用*p = &a時,編譯器會認為指標的值表示了地址,編譯報錯。如果你真想這樣表示,也可以,只需要將地址強轉為int型,即
*p = (int)&a;
9樓:天河宙
你要先int *p然後才能p=&a
10樓:匿名使用者
p是地址 &a是地址,*p是p地址對應的值
11樓:白花戀歌
去看 c和指標 這本書,有非常詳細的關於指標的幾乎所有的問題,&a表示取變數a的地址,根據宣告,*p表示訪問指標所得到的整形變數,一般情況下地址不能賦值給整形變數,如果非要這麼做,只能使用強制型別轉換
12樓:匿名使用者
*p 是錯的。。。。
c語言int a[5],*p; p=a;和p=&a;的對錯問題~希望詳細點,謝謝啦
13樓:
有了int a[5],*p;,p=&a;顯然就是錯誤的。int a[5],*p;說明了a和p都是int *型指標,只是a是常指標,p是指回針變數,那麼p=a;就合情答合理;&a是指向a[5]的指標,與它型別匹配的是int (*)[5],而不是int *。所以p=&a;的等號兩邊型別不匹配,編譯都過不了……
14樓:涼夏風歌
1.int a[10],*p;
p=a;//a是首地址
2.int a[10],*p=a;//定義時賦值3.int a[10],*p;
p=&a[0];
以上都是等效的,沒有p=&a的
譚浩強是說前者對
15樓:拾夢人
p=&a,是把a的地址賦給p,再通過*p得到a所賦給p的地址,取a裡面的內容 ,對於陣列的話好像兩個都對的,我用vc6.0編譯的時候都通過的
16樓:黑綠藍
不要太相信書上寫的話了,遇到問題最好的辦法是動手試一試
聽過的會忘記,看過的只能記住,只有做過的才能理解
17樓:丁榮衛
p=a,將陣列名(即陣列首地址)賦值給指標是對的
p=&a,編譯將會出錯
18樓:匿名使用者
前者是對的,邏輯上兩個都是對的,p指向a的地址,a和&a都表示陣列地址(陣列特有)
懷疑後一個可能編譯不過
19樓:路圖元
a是一個陣列,所以它本身就表示這個陣列的首地址,所以你要讓p指向這個地址就直接p=a就好了!當然,如果你拼要加&的話,你也可以用p=&a[0];
c++,請問*p=&a與p=&a(p是指標)有什麼區別
20樓:匿名使用者
p=&a容易理解,就是把變數a的地址存在指標p。*p=&a是把變數a的地址存放在指標p所指向的記憶體單元
21樓:匿名使用者
打個比方
int a = 1000;
int * p;
假設a存放於記憶體中的22222這個地址,那麼*p=&a相當於i=22222,而p=&a相當於使p指標指向a
22樓:匿名使用者
第一個是p指向的記憶體單元存上a的地址,第二句是p的值是a的地址
p是指標變數,*p=a和p=&a的區別
23樓:
1*p=a; //表示將a的值賦給p所指單元。
p=&a; //表示將p指向a單元,即將a單元的地址賦給p。
2int a,b;
int *pa,*pb;
a=10;b=20;
*pa=a;*pb=b; //這兩個語句有問題。pa,pb是野指標,沒有指向任何單元。
printf("%d,%d\n",*pa,*pb);
printf("%x,%x\n",pa,pb); //pa,pb的野指標,其值不確定。
printf("%x,%x\n",&a,&b); //輸出a,b的地址。
24樓:金色潛鳥
分清是語句裡還是宣告裡。
宣告 裡 int *p=a; 宣告 *p 是 int 型指標,初始化,讓 p 指向 a [陣列] 的始地址。
宣告 裡 int p=&a; 宣告 p 是 int型變數,不是指標,初始化,把變數 a 的地址 &a 賦給 p.
語句裡,若 p 是指標變數,
*p=a; *p 表示 值,把 變數 a 的當前值 賦給 指標。(指標指向的地址不變)。
p = &a; p 表示指向的地址, 把 變數 a 的地址 &a 賦給 p, 也就是讓指標指向 變數 a。
例如:int a=2, b=3;
int *p=&b; // 指標指向地址 初始化, 指向 b
printf("address: %p value:%d\n", p, *p); //輸出地址同 b, 數值 3
*p=a;
printf("address: %p value:%d\n", p, *p); //輸出地址同 b, 數值 2
p= &a;
printf("address: %p value:%d\n", p, *p); //輸出地址同 a, 數值 2
---------------------
25樓:匿名使用者
這段**在一些編譯器是編譯不過的,因為你沒有給pa,pb賦值,pa,pb兩個指標指向**,根本不知道
*p=a 和 p=&a是完全不同的兩碼事
*p 是 p 指向的地址的值,改變了值不是改變了它的地址,而p=&a就是改變p所指向的地址,使之指向a
舉個例子說明一下
p=&a; //p儲存的是a的地址
*p=b; //並不是p儲存了b的地址,而是將b的值儲存到p所指向的地址的那個值,這句相當於a=b,最後改變了a的值,而非p所指向的地址
26樓:匿名使用者
最關鍵的錯誤在pa和pb這兩個指標沒有初始化,
當執行*pa=a;*pb=b;時結果不可預期, 很可能程式應崩潰掉的.
27樓:匿名使用者
區別很明顯,*pa=a,*pb=b只是說記憶體pa位置存放的值是等於a並不是pa指向變數a的地址單元,因此輸出的地址是不一樣的。
c語言指標,int a=1; int *p; 其中p=&a和*p=&a有什麼區別?p的值是否相同?
28樓:匿名使用者
指標本質就是儲存記憶體地址的一個變數。所以指標可以指向某個變數在記憶體中儲存的單元格嘛。變數去訪問單元格最後也是編譯器通過變數名和地址一一對應去查詢的。
而指標裡面直接儲存的就是地址,所以直接可以訪問地址所對應的單元格。
不知道樓主說的是說明情況。所以幾種可能的都說一下:
測試**
#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都沒有指向一個具體的單元格,如何去取值啊。
29樓:冰水清清藍
int *p中其一般形式為:
型別說明符 *變數名;
其中,*表示這是一個指標變數,變數名即為定義的指標變數名,型別說明符表示本指標變數所指向的變數的資料型別。
例如: int *p1;
表示p1是一個指標變數,它的值是某個整型變數的地址。或者說p1指向一個整型變數。至於p1究竟指向哪一個整型變數,應由向p1賦予的地址來決定。
p就是地址。*p是一個指標型變數 *p=&a錯誤
30樓:匿名使用者
p=&a 是將變數a的地址賦給指標p本身的儲存單元
*p=&a 是將a的地址賦給指標p所指向的記憶體單元
第二種由於沒有對指標初始化,*p不知道指向什麼單元(有可能是重要的系統單元),所以這樣的操作很危險。
31樓:十面埋伏炸
不相同,p是指該指標的地址,向它賦值是將p指向另一個地址,而*p是指向p地址的指標,它是可以直接賦值的。希望可以幫助你~~~
32樓:好好學技術
p=&a,表示p指向a ,所以p的值為1
*p=&a,是把a的地址的值給*p,p值是不同的
c求教!定義陣列和指標變數,利用指標變數給陣列賦值後,分別利用陣列名下標法,指標下標法,數
滿意麼?include using namespace std int main int p ab ab for int i 0 i 10 i 陣列名下標法 cout cout for int i 0 i 10 i 指標下標法 cout p ab i cout for int i 0 i 10 i ...
普通的指標變數可以指向二維陣列嗎
麥香甜甜圈 當然可以。因為二維陣列在記憶體中也是按照一維方式存放的 記憶體單元是一維的 下面有個參考程式你可以試試。include void main int p a printf d n p 結果輸出1,將 p改寫成 p 1 則輸出2,改寫成 p 7 則輸出8,可見 p可以指向二維陣列中的任何一個...
c 中二維陣列的指標如何定義?
二維陣列的指標就是指標的指標,比如一個int型二維陣列 int array 2 3 指向它的指標就可以定義成 int p 如何使用這個指標呢,就和使用普通二維陣列一樣,比如第一行第二個元素 p 0 1 int a 2 2 a 就是 a 0 0 第一行第一列。a 1 就是 a 0 1 第一行第二列。a...