C語言中double p,a p和double a,p是不是等價的

2021-03-23 14:01:09 字數 6557 閱讀 5847

1樓:鄢昭君衡哲

等價的指標變數在定義的時候要加*

,使用的時候若是與其他指標做運算的時候就不用加*,例:double*q,*p;

p=q若是與非指標變數的時候就要加*

例*p=&a

2樓:仍易闕鈴

二者是等價的。但你要搞清楚了,指標什麼時候也不加*。宣告指標時,那個*是double的而不是p的。

取指標指向的內容時的*p中的*是取值操作符,也不是p的!在一個型別符下宣告指標變數和普通變數時,在指標變數前寫一個*是為了區別這個變數是指標而不是普通變數,*也是前面的型別符的。如:

inta,*p,b,*q;就是宣告a、b為int型普通變數,p、q是int

*型指標變數!

3樓:六秋緒佳

第一個問題

建立一個

double

型別的變數p,

並將數字a的第

1個元素複製給

p;第二個問題

建立一個

double

型別的變數p,

並將數字a的第

n+1個

元素複製給p;

c語言中*p=&a和p=&a有什麼區別

4樓:非常可愛

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));

5樓:育知同創教育

總得來說沒區別,就是指標初始化的時間不同而已int *p = &a;//這裡p宣告的時候直接初始化它的值為變數a的地址

int *p;//宣告指標p,p的值不確定可能指向任何地址,p = &a;//顯示初始化使p指向a的地址

6樓:匿名使用者

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

7樓:匿名使用者

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的地址。

8樓:匿名使用者

對於指標來說,

*p = a[0],表示向地址為p的記憶體區域賦值為a[0]。

p = a[0],把

變數p的值改為a[0],這個語句正常應用中是錯誤的。變數p的值為記憶體地址,這樣賦值會丟掉p原來指向的記憶體。

正確給記憶體地址賦值應該使用第一句。

9樓:天雨下凡

這樣問說明你對指標的概念還不清楚,以下兩種方式等價:

一、先宣告指標,再給指標賦值

int *p,a;

p=&a;

二、定義指標的同時給它賦值

int a,*p=&a; //這裡的*p可以解釋成int * p,int *表示p是指向int型變數的指標

10樓:匿名使用者

#include

int main()

11樓:平野律子

舉個例子吧: 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記憶體區通常是不可寫的,這樣就會報錯。採納哦

12樓:爵爺

在定義指標的同時讓指標指向某個地址 如int *p=&a;不能直接使用*p=&a; p=&a;代表的是讓p指向變數a的地址

13樓:百度使用者

*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。 第二個是讓p指向a的地址空間。*p的傎和a相等。

int a=2,*p; *p=&a; 列印*p應該是一個地址值,很長一串, p=&a; 打*p印結果會是2;

14樓:

有啊,*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的區別是什麼?

15樓:默q寇w綇

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

16樓:螆x莢d處

c語言中%p用來輸出指標型別自身的值。

也就是說 %p用來輸出地址。

一、使用方法:

%p一般僅用於printf及同類函式中。形式為printf("%p", varp);

其中後續引數varp為某一個指標變數。如

int a,*p;

p=&a;

printf("%p %p", p, &a);

這裡輸出的p和&a都是int*型。

二、功能:

%p格式符會輸出指標本身的值,也就是指標指向的地址值。

該輸出為16進位制形式,具體輸出值取決於指標指向的實際地址值。

三、與%x區別:

%x同樣輸出16進位制形式,不過%x對應的是int型,也就是說,其輸出長度與系統int型佔的位元組數相等。如32位編譯器,int型佔4位位元組,那麼%x輸出的結果最多為16個16進位制字元。

而%p輸出寬度取決於系統地址匯流排位數,即16位最多輸出4位16進位制字元,32位最多輸出8位16進位制字元,64位最多輸出16位16進位制字元。

所以用%p輸出地址,相對於用%x輸出,可以有更好的移植型和適應性,不會因為更換平臺而引起錯誤。

c語言中,p=&a和*p=&a有什麼區別

17樓:woshi菜鳥

p=&a,p的值是a的地址,

*p=&a,a的值是a的地址,

*是取內容符!!!

18樓:匿名使用者

inta;int*p=&a;相當於int*p;p=&a;記住就行了;除了定義的時候,其他時候*p(正常情況)只能等於內容(a的值);

19樓:薩好慕仝金

在定義指標的同時讓指標指向某個地址

如int

*p=&a;不能直接使用*p=&a;

p=&a;代表的是讓p指向變數a的地址

20樓:之飛蘭保岑

總得來說沒區別,就是指標初始化的時間不同而已int*p

=&a;//這裡p宣告的時候直接初始化它的值為變數a的地址int*p;//宣告指標p,p的值不確定可能指向任何地址,p=&a;//顯示初始化使p指向a的地址

21樓:狄廣英勤璧

*p=&a;是將a的地址賦值給*p,結果會是一個十六進位制的數。

第二個是讓p指向a的地址空間。*p的傎和a相等。

inta=2,*p;

*p=&a;

列印*p應該是一個地址值,很長一串,

p=&a;

打*p印結果會是2;

在c語言中,int *p,a; *p=&a,和p=&a有什麼區別?

22樓:天雨下凡

這樣問說明你對指標的概念還不清楚,以下兩種方式等價:

一、先宣告指標,再給指標賦值

int *p,a;

p=&a;

二、定義指標的同時給它賦值

int a,*p=&a; //這裡的*p可以解釋成int * p,int *表示p是指向int型變數的指標

23樓:匿名使用者

#include

int main()

{int *p,a=0xaa; //宣告 int指標

c語言中*p=a與*p=&a有什麼區別

24樓:清鵬之

讓我來綜合一下吧

在定義的時候

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後的地址是下一個元素的地址,而不是下一個位元組的地址,這是為什麼必須宣告指標所指向物件型別的原因之一。

25樓:匿名使用者

首先來說一下*和&,為了便於理解你可以認為,這裡*是取內容,&是取地址。

我不討論它們的區別,因為*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就不算錯了?後來老師給的解釋是這種形式只有在上面那種情況下成立,其他的情況確實都是錯的。

c語言中和分別是什麼意思,c語言中d和d分別是什麼意思?

是一個語句,判斷一個表示式的真假來執行兩條 比如int a 9,b 8 a b?a 8 b 9 就是這句 相當於if語句吧,問號前面的表示式為真的時候執行a 8,否則b 9 明白了吧。c語言中 d和 d分別是什麼意思?這幾個都是格式字元,在輸出不同資料時要用不同的的格式字元。1 printf d 會...

C語言05d和5d有什麼不同啊,C語言中5d和有什麼區別

nd 輸出的整型寬度至少為n位,右對齊,5d即寬度至少為5位,位數大於5則輸出實際位數 0nd 用得比較多,表示輸出的整型寬度至少為n位,不足n位用0填充printf 05d 1 輸出 00001printf 5d 1 輸出 1 為空格 05d是不足五位的前面補0,如23,輸出為00023,d是補空...

c語言中printfd5dnab其中d和5d什麼區別

前者是輸出任意長度 如果可能 的int型變數的值,後者是輸出5個單位長度的int型變數的值,比如說,如果要輸出兩個數100和200 第一種情況 int i 100,j 200 printf d d i,j 輸出的結果是 100200 第二種情況 int i 100,j 200 printf 5d 5...