這個C程式 p i i什麼意思,直接寫p i結果不是一樣的嗎?為什麼要那樣寫

2022-03-08 21:23:05 字數 3878 閱讀 6692

1樓:

*(p+i)=i;是指將i(i是變化的),賦給以p為首址的控制,假設p的位址為0x20,則第乙個數為0(i從0開始,到9),0x21位址的值為1,以後的位址類似。

如果僅是*p=i;則只會在0x20(還是假設p的首址為0x20),變化值(即0x20的值依次為0,1,2....),0x21及後續位址不會被賦值。

2樓:匿名使用者

這種情況你可以 把它看成陣列

*(p+i) -> p[i] == a[i]剛賦值後的指標是指向 陣列的起始位置的即 a[0]+i 其中i就表示陣列下標

*p -> p[0] == a[0]

3樓:匿名使用者

這個是對a陣列賦值,你要是*p=i的話,那麼需要p是變化的,你說是不是

但是程式中p沒有變化,難道你只對a的第乙個單元賦值???

如果for迴圈中這樣 for(i=0;i<10;i++,p++)或者*p++=i

4樓:匿名使用者

p=a;

這句話表示p是a[0]的位址

p+i就是a[0+i]也就是a[i]的位址*(p+i)=i就等價於a[i]=i

而*p=i等價於a[0]=i

最後程式的輸出是:

a[0]=0

a[1]=1

a[2]=2

a[3]=3

a[4]=4

a[5]=5

a[6]=6

a[7]=7

a[8]=8

a[9]=9

5樓:

*(p+i) = i; 相當於 p[i] = i; 實際效果是 a[i] = i;

*p = i; 相當於 p[0] = i; 實際效果是 a[0] = i;

在c語言中p*=i是什麼意思啊

6樓:風若遠去何人留

*=是c語言的特殊操作符號,呼叫形式為

a*=b;

其等效於

a=a*b;

但是用*=的形式,可以減少**輸入,同時還可以提高執行效率。

p*=i也就是p=p*i, 即將原始的p值與i值相乘, 結果賦值給p。

c語言中類似的符號還有+=, -=, /=, %=, ^=, |=, &=等等。

7樓:

親,你確定你的表示式沒有寫錯嗎?如果確定,那麼我也不知道;如果寫錯了,有兩種形式,是定義乙個指標「*p = i; 」裡的*p是p的值了,「 p = &i」是p指向了i的位址,也可以理解為將i的位址付給了指標p。

8樓:z龍傳正

就是讓p等於原p的值和i的值的乘積

9樓:**水心

是p=p*i的簡寫,復合語句,很常用的

10樓:至尊智者

就是 p=p*p 這種叫復合賦值語句

11樓:奧貝利科斯

p = p*i

還有 p+=i

p-=i等等

不要和*p = i混淆

c語言問題。 *p+i與*(p+i)有什麼區別啊?

12樓:匿名使用者

寫個c程式解釋吧。

#include

int main()

, *p = a;

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

return 0;

}輸出為 10 6;

為什麼呢?因為 *p = a 把 a 陣列的首位址的值放在 p 處,所以p = a,*p =a[0]= 9 => *p + 1 = 9 + 1 = 10.

p + 3 就是a陣列的首位址往後移動3位,即p = a[0], p + 3 = a[3]的值,就是6了。

13樓:匿名使用者

其實在定義時你這樣理解就很清楚答案了:

char *p;理解成char (*p);*p在一起是乙個char。那麼,*p+i就是*p的值加上i,而*(p+i)是在先p+i再*操作,*是什麼意思呢,在這裡是「取值」。所以,*(p+i)是把指標移動i個位置,再返回前位址的值。

14樓:匿名使用者

位址加i,位址變了。位址

c語言(*(*p+i))是什麼意思

15樓:咎婕竹俊雅

簡單的知識點:陣列的下標是從0開始的。

舉例來說,陣列有10個元素,陣列的下標是0到9;第乙個元素的下標為0,第二個元素的下標為1。

16樓:告悠蒯從蓉

*p+=i相當於*p=*p+i

p是乙個指標,上述**相當於把p指向的

變數的值加上i,假設p指向int型變數,內參考**容:

inta=5,i=3,*p=&a;

*p+=i;

//此處相當於a+=i,也就是a=a+i,此時a的值變成8

17樓:匿名使用者

(1)如

來果定義int *p,p=a[0];則p是指向二維源陣列首個元素的指標變數。

p=a[0]等價於p=&a[0][0],p+1等價於a[1]等價於&a[1][0]

(2)如果定義int (*p)[4] ,p=a;則p是指向二維陣列第0行的指標變數。

a等價於&a[0],*p等價於a[0];所以**p等價於a[0][0];

(*(*p+i)+j)等價於:陣列元素a[i][j]

18樓:匿名使用者

p應該是指向二維陣列的首位址

(*(*p+i))代表的是第一行第i列的值

19樓:劉麗平

指標所指的陣列中的元素

20樓:看灰過來了

看著像是二維陣列第0行第i列的元素

c語言中s*=*(p+i)是啥意思?

21樓:夢想——起航

表示式中p應該是個指標,指向乙個陣列,如a[10]陣列a的首位址傳輸給指標p,*(p+i)就是陣列的第i個元素a[i]。

表示式「s*=」就是s=s*()

於是,該表示式即為s=s*(*(p+i))也就是s=s*a[i]

表示式中第乙個「*」是乘法運算

第二個「*」是指標運算子。

22樓:匿名使用者

s*=*(p+i);

s=s*(*(p+i));

第乙個*是乘法運算,第二個*是取指標指向位址中的值的操作。

例如:int *p;

p=new int[4];

*p=1;

*(p+1)=2;

int i=1;

int s=2;

s*=*(p+i);//s=4

23樓:土杜土杜

等價於:s = s * (*(p + i));

c語言中,指標*p[i]與p[i]有什麼卻別?分別代表什麼意思?

24樓:匿名使用者

若果我還沒記錯的話:

你的問題:你這裡問的是指標

p[i]:陣列p的[i]這個地方放的值

*p[i]:陣列p的[i]這個地方放的值(這當做乙個位址)的值,即p[i]這個地方放了乙個位址(相當於另外乙個p[i]),然後用*讀取他所代表的值。----即我所說的:

陣列p的[i]這個地方放的值(當做乙個位址)的值

25樓:某李某

*p[i]指的是裡面的值。

p[i]子的是位址,也就是裡面的值所在的位址。

這個c編寫的程式不懂什麼意思啊,哪位大神能詳細再詳細的解釋解釋嗎

首先要把輸入的ch轉化一下統一的大小寫,最簡單應該是把ch直接減或者加乙個ascii碼的差值,然後switch裡就變成 case a action1 a,b break case b action2 a,b break default putchar a 或者case a action1 a,b b...

下面這個C語言程式直接用變數運算就不能發生交換,而用指標的引用運算為什麼能

這個計算順序與編復譯器的實 制現有關,我用 bai g 得到的結果是 2,1。編譯出的程式 du的計算順序大 zhi致是這樣的 從dao左往右,先計算 p,得 1,放入暫存器,然後 略 用不用指標都是一樣的,q p p q q 能交換的話,b a a b b 也可以。一 c語言裡沒有bai引用du這...

C幫忙看一下這個程式是什麼意思,只有解釋我打了雙斜槓

s.a s.top 這東東是棧頂元素 void init sqstack s 宣告 初始化棧 函式 elem pop sqstack s 宣告 取棧頂元素函式 void push sqstack s,elem e 宣告 出棧函式 void init sqstack s void push sqsta...