1樓:
其實樓上都沒有說到重點上面我來告訴你關鍵點
3個知識點你記住了:運算子優先順序別,迴圈語句(for)的控制範圍 ,指標於陣列的關係
你要清楚一點,你的for沒有大括號「{}」 這也就意味著每一次的迴圈只作用於它下面的那條最近的語句 什麼是語句? 就是以分號結束的(至少你寫的這個就只作用於a[i] = *p++; 這一個語句 當然還有其它情況這裡就不說了怕你亂) 那麼也就是說這裡的for迴圈整體上看會執行4次對吧? i 的值會從0~3對不對?
(最後一次1=4時跳出迴圈了) 那麼也就意味著 a[i] = *p++;這一語句也會執行4次看下面
這些說的就是for的作用範圍的問題,不加大括號就是預設控制一個語句,加了大括號就是大括號裡面的整個都控制(這裡說的控制是說for迴圈語句迴圈一次它控制的語句也會跟著執行一次)
a[i] = *p++;
a[i] = *p++;
a[i] = *p++;
a[i] = *p++;
等價於a[0] = 2;
a[1] = 4;
a[2] = 6;
a[3] = 8;
//你應該鬱悶為什麼上的 *p++ 依次變成2,4,6,8 至於i為什依次變成0,1,2,3 不用解釋了吧
那麼接下來就就涉及運算子優先順序別的問題那麼一 一來看
*p++ :根據運算子的優先順序我們知道這裡有2個運算子分別是* 和++ 那麼++優先順序比*要高(因為這裡++前面有個p , 所以++ 現在屬於後戳運算性質 ,其實就是說出現在一個變數的後面例如題中的p++, 那麼像++p就屬於前戳運算了, 前戳比後戳優先順序別低一點 ) 那麼++結合方向為從右至左 所以先計算p++ 此時++是後戳那麼p的值只有在下一個語句中才會+1 這就是後戳的特點, 那麼還剩下*號運算子了 所以(*p)就是陣列的第一個元素, 因為p就是陣列的首地址,(一個指向陣列地址的指標變數+1就意味著地址偏移它本身指向的型別位元組數的單元個數 例如這裡是int型別那麼+1就是來到下一個記憶體單元))而且此時p的值本身還沒有發生變化因為它剛剛是被後戳++運算子給運算了,還沒有來得及+1 要等p下次出現的語句中這個++才生效, 所以
a[0] = 2;
明白了嗎
那麼a[1] = *p++; 此時重複了上面的計算過程 不過你應該知道此時的a括號後面的括號裡面的i應該是1了對吧?同時p的值也作用了後戳的運算對不對? 下面的都是這樣子了。
一次類推,說的可能有點繁瑣。
其實,你沒有具體的記憶體概念。
給你說的再細緻點:就是 p+1 你知道意味著什麼嗎?int*p=a 你又知道是什麼意思嗎?
這種看起來和數學中的小學題目一樣的表示式其實不能光用數學上的一種思維方式去思考
你要知道每個語句背後的記憶體中發生的事情。在我看來p = a 就是說p這個變數得到了
a這個陣列的首地址。 那麼這個首地址在哪? 你都要知道, 不要只是概念的去理解,應該具體到物理硬體上, 因為計算機是個物理裝置,它是具體的在表現資料。
根據這些其實整個a陣列的值還是自己原來的數值,那麼最後輸出a[2]就是6
a[0]就是2
a[1]就是4
a[2]就是5
a[3]就是2
a[4]就是8
好了扯遠了。希望對你有幫助! ^_^
2樓:聽不清啊
執行後會輸出6
因為這相當於
for(i=0;i<4;i++)
a[i]=a[i];
用C語言編寫程式生成如下圖所示的輸出結果,要求根據使用者輸
可複製bai貼上,du請您zhi笑納 include int main void printf n for int i 1 i number i return 0 用c語言編寫一個程式生成如下圖所示的輸出結果,要求根據使用者輸入的一個整數,輸出一個數字組成的圖案。可複製貼上,請您笑納 include...
用c語言編寫程式輸出如下圖案,C語言程式設計 編寫程式,在螢幕上輸出下面的圖案(要求用for 迴圈實現)。
先貼效果圖 再貼 include stdio.h include conio.h main for j 1 j 2 i j printf n getch 在說思路 外層迴圈,迴圈7次控制列印7行 裡層2個for 第一個內for 控制空格數目從14 每次遞減2 一直容到0第二個for 控制 號數目,從...
求C語言讀程式寫輸出結果還要有計算過程拜託各位大神了
3 元素4的地 襲址 元素1的地址 2,3,7 函式呼叫是傳值,7是返回值,2 3是主調函式中的原值 21ff0c 3就是 了12位元組,因為一個int變數佔4位元組。在16位平臺下應該是21ff06 3,4,1 理由同2 0 1 2 0 1 2 0 1 2 是取餘數 1 4 第一次5 4輸出1 x...