1樓:星呈幻
a和p是變數,&a和*p是表示式,1和0x1000是常量a和*p表示的都是整形左值,p和&a表示的都是指標型左值,1和0x1000表示整形和指標型右值。(左右值的概念不清的話,google一下)
在記憶體中,a和p有儲存空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在暫存器中存放的,1和0x1000也有空間,在程式的常量段存放。
*p按照stanley lippman的著作《c++ primer》中的描述,p是指標變數,*是解引用操作符,*p是一個表示式,含義是「對指標變數p進行解引用操作」,這與表示式&a的含義「取整形變數a的地址」是正好是相反的操作。
2樓:失落血天使
首先 a和p都是變數 1000是常量,這裡只有a和p分配了記憶體,但是1000和1沒有
p 是指p的值,也就是1000
&a 是指a的記憶體地址
*p 是指p的記憶體地址
a 是指a的值也就是1
1 是a的值,放在分配給a的地址裡
1000 是p的值,放在分配給p的地址裡形象點說 ,a和p是房子
1和1000是住戶,1 住在a裡 1000住在p裡p 是指p的住戶
&a 是指a的門牌
*p 是指p的門牌
a 是指a的住戶
1和1000 是住戶
書的話,譚浩強的 c語言程式設計第3版 裡面有詳細的說明帖子就不曉得咧·······
3樓:
&a取址 *p取值這沒有什麼可說的。
int *p; int a;
a的地址1000h,即&a == 1000h. p是指標,它本身也有存放它的地址,設1200h,
即&p == 1200h(win32下,指標本身長度32位即4位元組,可通過sizeof(p)得到). 這樣就是用到兩塊記憶體了。
p = &a; 即p == 1000h. 這是一個地址值,本質是值,即可以加減等操作的。但是加減後的p, *p可能就無法訪問了,因為它已經不指向a了,比如p == 1004h了,如果這是在某一函式裡操作的,而1004h地址並不本程式的地址空間裡,取*p時那就非法訪問,要崩潰的;但如果1004h地址正好是這函式裡另外一個int b;變數的地址,那*p的值就是b了。
*p表示取p指向地址的值,也就是1000h上的值; a = 1; 說明1000h上的值為1,所以*p == 1;a, 它本身只是一個符號而已,這個符號代表了地址1000h起的int型長(4位元組)的一個記憶體塊, a=1,就是記憶體塊放一個值1, 如果有彙編的思想,能更形象點:[1000h] = 1,根本不需要a,b,c...之類的字元來表示,直接對記憶體地址進行存取。
4樓:匿名使用者
-------------------------------------
1. int a = 1;
2. int *p; -> 他的地址是1000
3. p = &a;
-------------------------------------
1.在記憶體 某個 地址 放入一個int型的數字[1],這個 地址 符號名為 a
2.宣告一個指標,這個指標 在記憶體位置1000的地方 型別是指標,符號名為 p
3. [*p] 我們宣告時 就是 *p 這個形態 所以就叫他指標.
那麼:a 是記憶體某個地址的 符號,語法上我們用 &a 表示這個符號的真正記憶體地質。
*p 因為是型別是指標,我們不能賦予它值,只能給他一個要指向的地址,共享和修改那個地址裡的內容(先不考慮const語句),。指標p裡放著 a的地址,當電腦讀到 p 時,直接去找 裡面的地址去了。
p 指向地址,*p表示那各地址的內容。*p 英語裡就叫它 point p 即 指標p
過程:p = &a : p 複製 a的地址到自己的位置。
*p = 2 : 電腦判斷 p的型別,是指標,就跳到 p 裡的地址位置,在判斷型別,不是指標,就把當前位置裡的 值 改為 2,如果還是指標,就重複上面 直到遇到不是指標型別的地址。
至於名稱,就叫指標,變數是 總稱,變數 a, 變數 b, 給他們賦予範圍和型別 ,int型變數a,指標型變數p;
5樓:匿名使用者
首先我們明確a為一個變數 假設
定義是 int a;
再明確p是一個指標,假設定義為 int* p;
當我們定義了一個a是系統會分派一個記憶體給你用來存放他的數值,如 執行了a=10;後 這個記憶體就存放了一個10的數字,當我們要用到它表示的10時,直接用a替代就可以了。
現在我們再用 p=&a "&"叫取地址符,他是一個運算子。 "&a"就表示指向a有就是上面的那個存著10的記憶體的地址。如果我們用到a的時候,很明顯,我們不能直接用p了,因為他是一個地址而不是我們需要的10這個數,那怎麼辦呢?
我們這裡就可用"*"這個符號,他表示取這個指標所指記憶體上的資料,即 *p就表示a了用法什麼的都一樣。
6樓:辯一辯
*p就是a...
p是一個變數,其實它裡面存的值就是1000,它在哪個記憶體空間放著這個不可知。
而a是在第1000號空間放著的。&a的值等於p.而*p就是a(不只是相等),並且值等於1
7樓:匿名使用者
p, &a表示a在記憶體中的地址,p=&a 表示把a在物理中的地址給變數p,*p表示取出p在記憶體中的值,
因為a的值在記憶體中的地址與p相同,所以*p=a。
關於c語言方面的數個人覺的還是譚浩強的比較經典。
8樓:匿名使用者
p=&a=1000; *p=a=1;
&是取地址符,*是去地址中的值。
9樓:
* 表示取值,& 表示取記憶體地址。&a表示取a的記憶體地址,*p即*(&a)表示取a的記憶體地址的值,也就是a吧
c語言中,p=&a和*p=&a有什麼區別
10樓:woshi菜鳥
p=&a,p的值是a的地址,
*p=&a,a的值是a的地址,
*是取內容符!!!
11樓:匿名使用者
inta;int*p=&a;相當於int*p;p=&a;記住就行了;除了定義的時候,其他時候*p(正常情況)只能等於內容(a的值);
12樓:薩好慕仝金
在定義指標的同時讓指標指向某個地址
如int
*p=&a;不能直接使用*p=&a;
p=&a;代表的是讓p指向變數a的地址
13樓:之飛蘭保岑
總得來說沒區別,就是指標初始化的時間不同而已int*p
=&a;//這裡p宣告的時候直接初始化它的值為變數a的地址int*p;//宣告指標p,p的值不確定可能指向任何地址,p=&a;//顯示初始化使p指向a的地址
14樓:狄廣英勤璧
*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。
第二個是讓p指向a的地址空間。*p的傎和a相等。
inta=2,*p;
*p=&a;
列印*p應該是一個地址值,很長一串,
p=&a;
打*p印結果會是2;
c語言裡面指標,*p=&a和p=&a,有什麼區別
15樓:匿名使用者
如果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賦值。
16樓:匿名使用者
第一個p是指標的指標,第二個p是指標。
c語言中*p=a與*p=&a有什麼區別
17樓:清鵬之
讓我來綜合一下吧
在定義的時候
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後的地址是下一個元素的地址,而不是下一個位元組的地址,這是為什麼必須宣告指標所指向物件型別的原因之一。
18樓:匿名使用者
首先來說一下*和&,為了便於理解你可以認為,這裡*是取內容,&是取地址。
我不討論它們的區別,因為*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就不算錯了?後來老師給的解釋是這種形式只有在上面那種情況下成立,其他的情況確實都是錯的。
19樓:沉睡的羅羅塔
*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原來指向的記憶體。
20樓:幻想祕境
*p=a是將a的值給p指標指向的地址的值
*p=&a是將a的地址給p指標指向的地址的值
pa在C語言中的意思,c語言中pa是啥子意思
a是一個指標 把指標a所指向的內容賦值p a為指標 a表示指標地址的內容 p a 把指標內容賦值給p 將a指向的變數的值賦給p c語言中p a是啥子意思 p 是一個結構體或者共用體型別資料的指標。p a表示訪問該指標上,名為a的資料成員。等效於 p a p是一個結構體型別的指標變數,這個結構體中有一...
c語言a與65的區別,C語言中a與a的區別是什麼?詳細一點,謝謝!
你這道題到底是想幹嘛?首先沒講明白程式的目的。看起來像是想進行大小寫轉換。看起來好像沒什麼錯誤。如果確實有錯誤的話,那估計是s字串沒有進行初始化。在gets之前加一句 memset s,0,sizeof s 檔案開頭加一句 include 哦!還有一個,是小寫字母的時候,要用減32,大寫字母的時候,...
c語言 內容如下,c語言中 與 的區別
因為如果沒有換行符號,這兩個printf在一行連續輸出 你在printf i am a computer n 加上一個換行符就可以讓這一句單獨一行了 求c語言 設計一個選單程式,包括3項內容如下,1 單日票 2 聯票 0 退出 include include void fun1 void void ...