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...