c語言有關paqp的問題,C語言 有關 p a, q p 的問題

2021-05-01 11:28:05 字數 3943 閱讀 8953

1樓:匿名使用者

p是一個一維指標,它指向陣列a的第一個元素a[0],

*(p++)會先取p當前指向的地址並做解引用得到a[0]元素的值,然後再將p指標移位指向相鄰的下一個元素(即a[1]元素)

q是一個二維指標(可以理解為指標的指標),它指向了指標p,所以*q得到的是指標p現在指向的地址(即a[1])**q相當於*p,由於上一條語句中,p移動到了a[1]元素,所以這裡得到的就是a[1]

2樓:匿名使用者

int a[5]=;

int *p=a,//此時p指向a[0],也就是1**q=&p;//此時q指向p

printf("%d\n",*(p++));//這句相當於下面的兩句的合併:

/*printf("%d\n",*p);//按照p定址並輸出,此時p指向a[0],於是輸出1

p=p+1;//p指標向前移動,此時p指向a[1],也就是2*/printf("%d\n",**q);//按照q二次定址輸出。q指向p,p指向a[1],於是輸出a[1],也就是2

在c語言中,*p=a,**q=&p是什麼意思

3樓:匿名使用者

p是個指標(一級指標),把a的值賦給p所指向的地址,q是個二級指標(也就是指標的指標),q中儲存這p的地址

4樓:baby魏栓寶

*p是一級指標儲存a的地址

**q是二級指標儲存指標p的地址

5樓:匿名使用者

p存貯a的地址

q儲存p的地址

c語言中指標*p=*q與p=q有什麼區別

6樓:

若p和q是申明為型別相容的指標變數,且都正確賦有合法值且不為null,那麼,*p=*q是把指標q指向的目標值賦給指標p指向的目標;p=q則是使指標p指向指標q指向的目標(最終是p和q指向了同一目標,這個目標就是q指向的目標)。在q==null時,*p=*q非法操作,p=q是合法操作(使p和q同為null)。綜上,除q為無效(null)時不能取值操作外,正常情況下*p=*q操作的是指標指向的目標,p=q操作的是指標本身——這是二者的本質區別。

以下**可以驗證:

#include "stdio.h"

int main(int argc,char *argv)驗證結果如下:

7樓:管迪勵素華

參***:我是這樣認為的:*是指標運算子。我們曾可以這樣去定義:int

a[10],*p,**s;

如果在下面的語句中出現了*p=a;

這就意味著指標p已經指向陣列的首地址,也就是a[0],此時我們可認為指標p是一級指標.

如果在下面的語句中出現了*s=p,

這就意味著指標s指向了p的單元,而p指向了a[0]此時s離陣列的首地址形象的像隔了2級

因此稱s為2級指標.

對於2級指標,有**s=*(*s)=*p=&a[0]

8樓:匿名使用者

*p=*q,意思是說,將q指標指向地址的值傳給p指標指向的地址,此時p和q是指向不同地址的(當然是在原先p和q就不同的情況下)而p=q呢,則是說將q指標指向p指標指向的地址,此時pq指向同一位置,共享同一段記憶體

9樓:匿名使用者

指標指向的是一個地址,但這個地址裡面可能是一個變數,也可以是個常量,或者是其它型別...

p=q只是一個變數間的傳資料傳遞

10樓:匿名使用者

1)*q是指標所指向的一個字元,所以把一個字串賦值給一個字元,顯然是錯誤的.

2)c語言不進行強制的型別識別,所以一個字元可以以數值形式賦值,實際你賦值的內容是它的ascii碼,也就是'd'

3)c語言中字串不能直接給指標賦值,而應該使用函式:strcpy,strncpy.函式原型為:

char *strcpy( char *strdest, const char *strsource );

char *strncpy( char *strdest, const char *strsource, size_t count );

4)printf函式中使用字串時,應該直接使用指標.而不帶*

5)從這句:*p=&x;來看,p是指標的指標,所以*p是指標,所以用法是正確的.

從以上分析得出幾點結論:

1)c語言對資料型別不會進行強制識別,字元型資料可以賦值為數字,字元指標可以指向數字,指標本身也會有指標.

2)指標只是指的一個地址,這個地址本身也是資料.如果把這個地址當作字串使用的話,一定要直接使用指標,如果使用形如*p這樣的用法的話,只是指的p指向的首地址的字元.

any more problems?

11樓:匿名使用者

*p=*q 是指向地址

p=q是指向值

12樓:鏡面世界

呃⋯⋯第二個前面無運算子相當於p,有運算子且p是函式名或函式指標時,加括號相當於p,不是則無意義,p是函式名且返回指標且是呼叫時,不加括號是返回的指標的間接引用,第一個p不是指標的話無意義,如果是指標(什麼指標都行,包括函式指標等不常用的,但不能是野指標,執行時會報錯),如果這個表示式前面是運算子號,相當於p,如果前面是另一個表示式,是*p與那個表示式位與,p是函式指標時加括號相當於p,p是函式指標或函式的二級指標且該函式返回引用時是返回的引用的記憶體地址。(呼!累死我了,給個滿意啊!

看不懂的話等我有時間弄個**)

c語言程式的一個小問題哦 能幫忙解釋下 for(p=a q=b;*p&&*q&&*p==*q,q++,p++)什麼意思啊!急!!

13樓:匿名使用者

for(p=a, q=b;*p&&*q&&*p==*q;q++,p++)

這是一個迴圈,你還少寫個逗號呢,我在上面添上了。而且感覺你還有個地方應該是分號,你寫成逗號了。如果我改的不對,請補充問題。

首先「p=a, q=b」是賦初值,就是開始迴圈時q,p的初始值。

然後「*p&&*q&&*p==*q」這是判斷是否迴圈的條件,&&符號是與的意思,只有這三個條件同時為真是才會成立,*p和*q是判斷這兩個變數裡的值是否為0,c語言規定非0就是真。*p==*q是判斷兩個是否相等。綜上就是判斷p和q是否相等且不為0.

最後「q++,p++」是讓兩個變數自增1。

然後繼續重複。

14樓:

如果a和b都數陣列的話

p =a,q = b;

是把a陣列的首地址賦值給p,b方式一樣,

;*p&&*q&&*p==*q

要同時滿足*p != 0,*q != 0,*p==*q三個條件,該for迴圈才會執行,

q++,p++

就是q和p指向下一個元素,

15樓:徐光豬

#include

int main()

樓主先看看這個程式:

這裡for的意思就是,將a,b的首地址給了p,q兩個指標迴圈條件是:*p&&*q&&*p==*q意思是 *p!=null&&*q!

=null&&*p==*q就是,p,q兩個指標在沒有移動到末尾時,只要p,q指向不等的值,迴圈就退出

16樓:匿名使用者

如果指標p指標q所指的值 均不為0且相等,指標p,q向後移

17樓:匿名使用者

就是p=a,q=b;

while(*p&&*q&&*p==*q)

c語言指標問題。 若有float a=25,b,*p=&b; 那麼語句*p=a;和p=&a;怎麼

18樓:匿名使用者

*p=a,指的是將a的數值賦予指標指向的變數。

p=&a,指的是將a的地址賦予指標p,即指標p指向a

float a=25,b,*p=&b中的*p=&b指的是定義指標p的同時將p賦初值。

有關大學c語言的問題,有關於大學c語言問題

1 ad 2 20,30,20 3 3120 4.x值為1 5.1,3,3 有關於大學c語言問題 int x 0,y 20,z 30 if x y 50 z printf y d y else printf y d y 求y的值 這裡需要注意的是y 50這個是賦值。所以先賦值y 50,然後 判斷y ...

有關C語言的,有關c語言的?

第4行改為 int x,y,z 8 12行 加入變數int result 0 case result x y case result x y case result x y printf result 有關c語言的?有關c語言 toss 函式演算法有問題吧?不知道你那個演算法是什麼意思,有什麼依據!...

C語言ii問題,有關C語言i 的 i的問題

mian int x,y,z 定義整形變數x y z x y z 把變數z的值賦給x和y 這時x y z的值是未知的 z 3 給z賦值3 y x 1 prinft d t d t x,y 把x 1的值賦給y,然後x加1,輸出x y y x 1 prinft d t d t x,y x自加1,然後把x...