c語言中,假設pa是指標,那麼pa 的作用是什麼

時間 2022-07-15 21:05:04

1樓:匿名使用者

*pa++包含兩個語句,一*pa=*pa+1, 即pa指向的地址的值加1, 二pa=pa+1,即指標後移一個單位。

定義一個指標pa,那麼*pa,pa,&pa都是什麼意思?

2樓:匿名使用者

首先要清楚一個變數在記憶體中(在編譯或者函式呼叫時)都是會分配地址的如果有以下定義:int a, *pa = &a;

那麼 *pa 表示pa所指向的目標變數即a,也就是說此時這兩者是等價的

pa因為是個變數,在定義中初始化時向這個變數中存入了a的地址,所以pa表示a的地址

&pa表示變數pa的地址。我們可以定義一個二級指標指向這個變數pa,具體方法是:int **p; p = &pa;

3樓:全才之玉樹臨風

*pa表示內容,pa是地址,如果pa是指標,沒&pa這種用法。如果pa不是指標,&pa表示地址

4樓:匿名使用者

hhhqwfgggh bzcfujhiot458

c語言中,指標的運算是怎麼算的,如pa++

5樓:匿名使用者

指標自加一位

就是指向該型別的下一個單元

也就是實際增加的地址值

為sizeof(*pa)

6樓:雲淡風輕in蘇州

pa++就是pa = pa+1

但是這個1的位元組數是根據pa指標的型別來取值的比如int* pa;那這個1就是sizeof(int)double*pa;那這個1就是sizeof(double)陣列的話,很簡單,就是指向下一個元素的地址!

7樓:我是你爺

要看什麼型別,它會指向下一個變數的首地址,比如p指標是long int型的,p++就會跳過四個位元組指向下一個。一般指標自加運用於陣列中,因為這樣可以方便指標一個個指向陣列中的成員。

8樓:罪_飄落無殤

如果是陣列就指向下一個元素地址

9樓:維真

指向pa後面一個地址

c語言指標*pa++與*++pa問題

10樓:w海_風

*p++先取p值做*p運算,再使p加1即指向向一閣元素,是的

11樓:

是的,*pa++和*++pa就是誰在前先算什麼,*pa++就是先算*pa,在算++,*++pa先算++,在只想pa

在c語言陣列指標中(++*(pa+1)[1])表示第一行的首地址加一嗎?

12樓:自我程式設計

你這個**除非pa是二維陣列指標或二級指標(比如int (*)型別或int **),否則如果是一級指標(比如int*)這**就是錯誤的。

pa為指標,這裡小括號優先,先將pa指向的地址+1(後面的pa表示最初地址+1)。

原式子變為++*pa[1],這裡中括號優先,所以原式子相當於++*(pa[1])。

進一步原式相當於++(*(pa[1]))。

顯然這裡pa如果是一級指標,那麼pa[1]就是一個值,*pa對值取值就錯了。

所以假設pa指向一個二維陣列int a[3][3]=,,}這個式子pa初始指向第一行。

所以pa+1後,就是指向第二行。

所以(pa+1)[1],就是取從第二行開始的二維陣列(,})的第2航行元素,也就是這樣的一維陣列。

所以前面*取的就是的首元素值,再算++,就是對首元素的值自增。

所以這個**,pa是指向二維陣列的指標,那麼式子就是對第三行首元素值自增。

下面我們可寫**測試:

#include

int main()

int a[3][3]=,,};

int (*pa)[3]=a;

printf("式子執行前a[2][0]=%d\n",a[2][0]);

(++*(pa+1)[1]);

printf("式子執行後a[2][0]=%d\n",a[2][0]);

return 0;

13樓:莊政警

不是的。

""優先於"*",所以++*(pa+1)[1] 就是++*((pa+1)[1])而(pa+1)[1]就是 *(pa+1+1)就是pa[2],總體就是++*(pa[2]),  下標方式就是++pa[2][0]

很直觀了: ++*(pa+1)[1]的含義是第二行第0列的值+1驗證一下:

c語言中 s=*pa+*pb;什麼意思

14樓:匿名使用者

指標變數pa 指向一個擁有某種型別的數的單元 ,這個單元裡存放著一個某種型別的數a

指標變數pb指向一個擁有某種型別的數的單元 ,這個單元裡存放著一個某種型別的數b

*pa+*pb即取出a和b的值相加 a+b 然後把結果賦值給s

15樓:匿名使用者

亂碼的關鍵還是資料型別問題。char的值的範圍(-128 ~ 127)

"字母z向後錯8位後在ascii碼錶中進入了小寫字母的範圍"

pa=*pa+*pb;

if(*pa>'z'||*pa>'z')

那是因為*pa的內容先被修改了,才做判斷。當*pa原來是'z'時,比如+9,就是99,進入了小寫範圍。這時你做判斷if(*pa>'z'||*pa>'z')就不對了。

先判斷大小寫,再分別對待,別嫌麻煩

我的**

int main()

else //不是大寫,那就是小寫咯

s1[i] = c1;

} printf("%s\n\n", s1);

return 0;}

16樓:聶鑫

假設int a = 3;

int b = 5;

int s = 0;

int *pa;

int *pb;

pa = &a;

pb = &b;

s = *pa + *pb; //相當於a+b

s = 8;

*表示間接運算子,能夠通過pa這個指標所指向的地址去找到該地址的變數。

在這裡,pa = &a; *pa = 3;

&表示取地址符,&a就是取到a這個變數的地址

17樓:東門子

pa和pb是兩個指標,你又沒提供其他內容,我姑且就認為是int型了。*pa和*pb就是取其內容

所以,s等於兩個整數之和

18樓:包籽

*是取值的意思,而pa和pb都是地址,整個就是取pa的值和pb的值賦給s

一道c語言的題目,求詳細解釋*pa與pa的區別

19樓:匿名使用者

這裡涉及的主要是對指標的理解;

首先宣告四個變數,兩個int型別的變數,兩個int *型別的變數;int型別的變數儲存的是int型別的值,int *型別的變數儲存的是一個地址,這個變數可以儲存一個int型別的地址,而這個int型別的地址裡面毫無疑問儲存的是一個int型別的值。

int *pa=&a,可分解成:

int *pa;

pa = &a;//把a的地址賦給pa

這樣pa這個指標就指向了變數a的地址;

* 是一個解引用符,在這裡,*pa就是指標pa所指向的記憶體當中儲存的變數;也就是說這時*pa與a是等價的。

pb與b的關係也是一樣的;

現在就很清楚了:

*pa=3;//往a這個變數裡存3

*pb=4;//往b裡存4

a=5;//往a裡存5

b=6;//往b裡存6

pb=pa;//pb這個指標指向變數a的地址*pa + *pb;//就是a + a,並且此時a = 5答案自然是 a

20樓:匿名使用者

答案為a、10

你迷惑的可能是這裡:

int *pa=&a,*pb=&b;

其實這個相當於:

int *pa,*pb;

pa = &a;

pb = &b;

這個是初始化的地址賦值模式,和指標正常賦值語句*pa=a是不一樣的。

21樓:匿名使用者

#include

void main()

/*a、10 b、11 c、12 d、7*//*其實我沒看懂,試過只後才知道結果是什麼*/a=5,b=6

pa=0012ff7c,pb=0012ff78*pa=5,*pb=6

a=5,b=6

pa=0012ff7c,pb=0012ff7c*pa=5,*pb=5

10press any key to continue

在c語言中,pa = &a[0]; *pa = *pa +1和*pa++等價嗎

22樓:匿名使用者

不等價。*pa++,++的優先順序高,相當於*(pa++),加的是地址,不是內容。

c語言的函式指標舉個例子,c語言中函式指標是什麼 有什麼用 舉個例項

劉文正粉絲 函式指標告訴cpu下一步需要執行 的 的指標,一陣列十分相像.include void function int i,double d 一個函式的宣告 void anotherfunction int i,double d 另外一個函式宣告 int main mxl033 回答是對的。v...

關於c語言中指標賦值的問題,關於C語言中指標賦值的問題

計算天下 你這樣想說明你還沒有真正理解記憶體和指標。int a 表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof int 不同編譯器可能不同。int p 也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存...

關於C語言指標自增運算的問題,c語言中指標可不可以用在自增自減運算子中

搗蒜大師 這寫操作等價 p p 都是p加,然後 這些操作等價 p p p 相當於先 了,然後p再 include main p 指向2 printf d n p 2 p p 1 p指向3 printf d n p p指向4,再 4 p p 1 p指向5 printf d n p 5,p指向6 p p...