我在C初學者,比方說,我有這樣的代碼:s ++和* s ++有什麼區別嗎?
#include <stdio.h>
void test(char *t)
{
t++;
*t = 'e';
}
void main()
{
char a[] = "anto";
printf("%c\n",a[1]);
test(a);
printf("%c\n",a[1]);
}
這是示例代碼,當我搞清楚指針如何工作。根據我的聲明:
t++;
在上面的代碼
將1
char
在調用函數test
增加陣列a
的地址。好吧,據我所知,*
用於檢索指針指向的對象值。
但是,很奇怪,當我改變t++
到
*t++;
我像以前一樣得到同樣的輸出。我完全同意這一點,上面的說法 *t++;
應該改變內容只知道,根據運營商的定義*
。
但是這又改變了地址t
。怎麼來的?我在哪裏弄錯了這個概念?
預先感謝
注意:始終在啓用警告的情況下編譯,例如'gcc -Wall'。 *閱讀並注意*這些警告 – 2012-04-03 11:35:56
IIRC在空指針上做數學只是有一個未定義的結果,而解引用空指針有未定義的行爲。所以有區別,但只有t爲空時才顯示出來。 – harold 2012-04-03 11:41:15
@PaulR:謝謝你的建議。 – 2012-04-03 11:44:30