首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言指針陣列經典三題:指針運算、字元輸入、二維數組指針

     編輯:C 語言問答

三道指針題目完整解析

題目一:指針自增與二級指針


int a[5]={2,4,6,8,10}, *p, **k;
p = a; k = &p;
printf("%d", *(p++));  // 輸出 2
printf("%d\n", **k);   // 輸出 4

解析:

  1. *(p++):後置++,先取值 *p(即 a[0]=2),再 p++ 指向 a[1]
  2. **k:k 指向 p,p 現指向 a[1],故 **k = *p = a[1] = 4

題目二:getchar 處理換行符


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] 指向首元素 2
  • i=0:aa[0][1] = *p+1 = 3,印 *p (仍指向 aa[0][0]) → 2
  • i=1:++p → p 指向 aa[0][1] (值 3),印 *p → 3

指針運算核心規律

表達式含義效果
*p++*(p++)取值後指針後移
(*p)++指針不動,所指值增1修改數據
++*p所指值增1後取值修改並取新值
*++p指針先後移再取值跳過當前元素
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved