剛在做題目
碰到一題要寫函數的,要在主程式裡面設一個Num,要傳指標進去函數裡面,然後每呼叫一次函數,Num就要+1
所以我在函數裡寫道
*ptr++;
以為這樣跟平常的 i++ 效果一樣:值應該會增加1吧!
沒想到....
居然不行XD|||
測試結果是會把位置+1,然後才取值
然後上網查了查優先性,
發現 取值運算子" * "跟 "++"的優先位階是一樣,順序是「由右至左」 XD|||
這就解釋為什麼會錯了
*ptr++ 會先執行++,所以位置變成ptr+1
然後 * 才作用,取了指向 ptr+1的位置的值
===
附上程式碼
void count(int *);
int main(void)
{
int num=5, *ptr=#
printf("address of num = %p\n",&num);
printf("value of ptr = %p\n",ptr);
printf("value of * ptr = %d\n\n",*ptr);
count(ptr);
count(ptr);
count(ptr);
}
void count(int *ptr){
printf("value of ptr = %p\n",ptr);
printf("value of * ptr = %d\n",*ptr);
*ptr++;
printf("value of ptr = %p\n",ptr);
printf("value of * ptr = %d\n\n",*ptr);
}
執行結果:沒動到要改的值,值一直是5,只改到指標指向的位置 T__T
解決方法:
1.加括號:(*ptr)++;
2.寫成:*ptr+=1;
留言列表