Welcome 歡迎光臨! 愛上網路-原本退步是向前 !

115高雄市高中

問答1:

void Q1() {

char s[]="ABCDEFG";

char *t=&s[1];

*(t+4)=0;

cout << t << s;

}

ANS:

 *t=&s[1];

 指向字元B

*(t+4)=0;

字元B往後4個在F位置填入0表示字串結束

i=BCDE

s=ABCDE

 

問答2:

int q2(int x) {

    if(x < 2) {

        return 1;

    }

    else if(x % 2) { //奇數

        return q2(x-1);

        }

  return q2(x/2) + 1; //偶數

}

q2(520)

q2(260)+1

10

 

q2(260)

q2(130)+1

9

 

q2(130)

q2(65)+1

8

 

q2(65)

q2(64)

7

 

q2(64)

q2(32)+1

7

 

q2(32)

q2(16)+1

6

 

q2(16)

q2(8)+1

5

 

q2(8)

q2(4)+1

4

 

q2(4)

q2(2)+1

3

 

q2(2)

q2(1)+1

2

 

q2(1)

1

1

 

 

問答3

int foo(int x, int *y) {

    int f;

    printf("%d %d",x,*y);

    f=x*=*y;

    printf("\nf=%d",f);

return f;

}

int Q3(int a, int b) {

    int *c=&a,*d=&b;

    *c = foo(b,c);

    *d = a + b;

    return a + b;

}

  1. 初始化變數
    • 進入 Q3(3, 2),此時區域變數的初始值為:a = 3, b = 2。
    • 指標初始化:c 指向 a 的記憶體位址(*c 即為 a),d 指向 b 的記憶體位址(*d 即為 b)。
  2. 執行 foo(b, c)
    • 傳入的參數為 x = b = 2,以及指標 y = c(意即 y 也指向 a,所以 *y 就是 a 的值 3)。
    • 函式內部的運算:x *= *y
      • 等同於 x = x * (*y) \rightarrow  x = 2 * 3 = 6。
      • 接著執行 return x;,因此 foo 函式回傳 6
    • 注意:此時 x 只是傳值(pass by value)的複本,因此並不會改變外部 b 的值。
  3. 賦值給 *c
    • 程式碼執行 *c = foo(b, c);。
    • 因為 *c 代表的就是變數 a,所以此時 a 的值被更新為 foo 的回傳值,即 a = 6
  4. 更新 *d
    • 程式碼執行 *d = a + b;。
    • 此時 a = 6, b = 2,所以 a + b = 6 + 2 = 8。
    • 因為 *d 代表的是變數 b,所以此時 b 的值被更新為 b = 8
  5. 計算回傳值 a + b
    • 最後執行 return a + b;。
    • 此時最新的變數值為 a = 6 且 b = 8。
    • 最終結果:6 + 8 = 14

 

 

[ 資訊科技 ] 瀏覽次數 : 10 更新日期 : 2026/09/11