剛在做題目

碰到一題要寫函數的,要在主程式裡面設一個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;

 

 

 

 

arrow
arrow

    迷途工程師 發表在 痞客邦 留言(0) 人氣()