int a[5]={2,4,6,8,10}, *p, **k;
p = a; k = &p;
printf("%d", *(p++)); // 輸出 2
printf("%d\n", **k); // 輸出 4
解析:
*(p++):後置++,先取值 *p(即 a[0]=2),再 p++ 指向 a[1]**k:k 指向 p,p 現指向 a[1],故 **k = *p = a[1] = 4
char c[6]; int i=0;
for(i=0; i<6; i++) c[i] = getchar();
for(i=0; i<6; i++) putchar(c[i]);
// 輸入: a⏎ b⏎ cdef⏎
// 輸出: a⏎ b⏎ cdef (前6字元: a, \n, b, \n, c, d)
解析:getchar() 讀取所有字元含換行符。輸入緩衝區:'a','\n','b','\n','c','d','e','f','\n'。循環讀 6 次:c[0]='a', c[1]='\n', c[2]='b', c[3]='\n', c[4]='c', c[5]='d'。putchar 輸出這 6 個字元,\n 導致換行。
int aa[3][3]={{2},{4},{6}}, i, *p=&aa[0][0];
for(i=0; i<2; i++) {
if(i==0) aa[i][i+1] = *p + 1; // aa[0][1] = 2+1=3
else ++p; // p 指向 aa[0][1]
printf("%d", *p);
}
// 輸出: 23
解析:
aa 初始化:{{2,0,0},{4,0,0},{6,0,0}}(未列出元素補 0)p = &aa[0][0] 指向首元素 2i=0:aa[0][1] = *p+1 = 3,印 *p (仍指向 aa[0][0]) → 2i=1:++p → p 指向 aa[0][1] (值 3),印 *p → 3| 表達式 | 含義 | 效果 |
|---|---|---|
| *p++ | *(p++) | 取值後指針後移 |
| (*p)++ | 指針不動,所指值增1 | 修改數據 |
| ++*p | 所指值增1後取值 | 修改並取新值 |
| *++p | 指針先後移再取值 | 跳過當前元素 |