c語言中,p為指標,那麼p和p是一樣的嗎,有什麼區別呢

2021-03-03 20:39:08 字數 5594 閱讀 9211

1樓:great啦啦啦

區別為:windows 7,中文名稱視窗7,是由微軟公司(microsoft)開發的作業系統,核心版本號為windows nt6.1。

windows 7可供家庭及商業工作環境:膝上型電腦、平板電腦、多**中心等使用。

c語言是比較基礎的程式語言,是學好組合語言的基礎,所以學好c語言很重要。

在資訊工程中,指標是一個用來指示一個記憶體地址的計算機語言的變數或**處理器(cpu)中的暫存器(register)。指標一般出現在比較近機器語言的語言,如組合語言或c語言。面嚮物件語言如java一般避免用指標,而是引用。

c語言中,p為指標,那麼*p和&p是一樣的嗎,什麼區別

2樓:匿名使用者

上面是我自己做的原理圖,深入到記憶體中,你就懂了.不懂隨時call

3樓:匿名使用者

樓主發現這兩個的區別了嗎?

*p &p

他們的區別無非就是p前面帶的符號

,如果樓主知道該符號的含義就不會提這個問題了;

* 取值運算子?

& 取地址運算子?

* 和 & 互為反運算子;

樓主還有疑問嗎?

加油!!

4樓:xiao蝌蚪找媽媽

在宣告指標變數的時候,*p表示宣告p是指標變數,比如int *p(宣告p為int型指標變數);在呼叫指標變數的時候,*p表示指標變數p所指向的變數的值,比如int a=5,b; int *p;(宣告p為int型指標變數),p=a; b=*p;(把p所指向的變數的值,即a的值賦給變數b)。對於&p,則是代表變數p的地址,顯然和以上*p的兩種意思都不一樣

5樓:

*p 是取p的內容

&p 是取p的地址

6樓:使用者名稱都是渣渣

*p是p指向的內容,&p是儲存p指標的記憶體地址

c語言*&p和&*p怎麼算的?他們有什麼不同?

7樓:拍子

1、*&p 等價於*(&p)。

2、&*p 等價於&(*p)。

舉個例子:

p是int變數,那麼*&p = p,而&*p是非法的。因為*p非法。

p是int *指標變數,那麼*&p = p,&*p = p,都是p。

printf("%d\n",*&p)中不知道p是什麼型別。

如果p是一個指標,則*&p和&*p一樣。

如果p是一個變數,比如int p =1;那麼*&p = *(&p) = 1(即從p的地址取值),而&*p = &(*p) 則非法,因為p=1,*1是取記憶體地址為1的值,這在c語言中是不合法的。

解釋下指標*p p &p的關係

8樓:萬能導師

使用*定義指標,例如char*p;

p是一個字元的指標;

如果在定義時沒有使用100*,那麼取指標指向的記憶體的值;

例如:inta[]=,3,5,7,9{1},*p;

p=一個;

所以乘以p等於1;

& and是地址操作符,例如,& and是變數p的地址;

比如:# include < stdio . h >

main()

{int[]={1,2,3,4,5},*p=;

printf("%d\n」*p);

printf("%d\n,p);

printf("%d\n」);

printf("%d\n」代替);

擴充套件資料:

指標變數可以加或減,比如p++、p+i、p-=i。指標變數的加和減不是簡單地加或減一個整數,而是取決於指標指向的資料型別。

當給一個指標變數賦值時,要把一段資料的地址賦給它,而不是直接賦給一個整數,比如int*p=1000;這是毫無意義的,通常會導致程式在使用過程中崩潰。

確保在使用指標變數之前初始化它,否則您將無法確定指標指向的位置,如果指標指向的記憶體不允許,程式將崩潰。對於當前度不指向的指標,建議使用null。

可以減去兩個指標變數。如果兩個指標變數指向同一個陣列中的一個元素,那麼減法的結果就是兩個指標之間不同元素的個數。

陣列也是有型別的,陣列的名稱表示一組相同型別的資料。當您定義一個陣列,或者與sizeof, &操作符一起使用它時,陣列名稱表示整個陣列,並且表示式中的陣列名稱被轉換為指向陣列的指標。

9樓:冷123波

定義指標時用*,如char *p;

那麼p就是一個指向字元型的指標;

如果*不在定義時用,那就取指標所指向記憶體的值,如int a=,*p;

p=a;

那麼*p就是1;

&是取地址運算子,如&p就是取變數p的地址;

下面這個例子:

#include

main()

,*p=a;

printf("%d\n",*p);

printf("%d\n",p);

printf("%d\n",a);

printf("%d\n",&p);

}輸出結果為:

11245036(各人的電腦可能不相同)

1245036(各人的電腦可能不相同)

1245032(各人的電腦可能不相同)

從結果可以看出,

*p為所指向的地址的值

p為所指向的地址,即a的地址

&p為指標變數p的地址

c語言裡面指標,*p=&a和p=&a,有什麼區別

10樓:匿名使用者

如果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賦值。

11樓:匿名使用者

第一個p是指標的指標,第二個p是指標。

c語言中,p=&a 那麼*p與a的區別是什麼?

12樓:星呈幻

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的地址」是正好是相反的操作。

13樓:失落血天使

首先 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版 裡面有詳細的說明帖子就不曉得咧·······

14樓:

&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...之類的字元來表示,直接對記憶體地址進行存取。

15樓:匿名使用者

-------------------------------------

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;

16樓:匿名使用者

首先我們明確a為一個變數 假設

定義是 int a;

再明確p是一個指標,假設定義為 int* p;

當我們定義了一個a是系統會分派一個記憶體給你用來存放他的數值,如 執行了a=10;後 這個記憶體就存放了一個10的數字,當我們要用到它表示的10時,直接用a替代就可以了。

現在我們再用 p=&a "&"叫取地址符,他是一個運算子。 "&a"就表示指向a有就是上面的那個存著10的記憶體的地址。如果我們用到a的時候,很明顯,我們不能直接用p了,因為他是一個地址而不是我們需要的10這個數,那怎麼辦呢?

我們這裡就可用"*"這個符號,他表示取這個指標所指記憶體上的資料,即 *p就表示a了用法什麼的都一樣。

c語言中,設p是指標,p x與p x有什麼區別

前者是在定義指標時才成立,意思是定義指標p是變數x的地址。後者是程式語句中的取x地址賦值給p。p x是在定義變數時 p x是在定義變數後。int x,p x 或 int x,p p x 兩個語句不可能同時出現,必然有一個是錯誤的。p x 指的是指標p的 值 是一個指向x的指標 p x 指的是指標p指...

求助,在C 中,如果p是指標,那麼p,0與p,NULL等價嗎

根據 iso 定義,c 中 兩者是等價的,不同於c語言。c語言 null 指標 定義成 void 0 c 中 null 指標 定義成 整型常量 0 是右值.c 的null 指標 iso specification 4.10 1 原文 a null pointer constant is an int...

C語言中的while p NULL 語句,這個p指標是不是自動往後走啊,沒有 p和P

不會自動往後走的。這種情況下一般也不會簡單地加,多半是做連結串列之類結構的遍歷,p p next之類的語句。那不行吧,有沒有重新賦值p的呢?在這條語句中,p沒有變化 就這半個迴圈語句而言是不會改變p指標的值的,你這裡只列了一個迴圈條件,並沒有列出迴圈體,這個p指標應當是在迴圈體中值發生變化。c語言中...