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

C語言指標筆試題詳解:多級指標與字串操作

     編輯:關於C語言

題目

#include <stdio.h>
int main() {
    char *a = "Aliyun";
    char **b = &a;
    *b = "programming test";
    char *c = ++a;
    a = "talents.";
    printf("%c\n", *++c);
    return 0;
}

問輸出為何?

逐步分析

  1. char *a = "Aliyun";:宣告指標變數 a,指向常量字串 "Aliyun"。a 存放該字串的地址。
  2. char **b = &a;:宣告指標的指標 b,實際上 b 仍是指標,指向的變數是指標 a。b 存放 a 的地址(而非 a 的值)。指標型變數永遠存放地址(不含 NULL)。
  3. *b = "programming test";:* 為解引用運算子,取得 b 指向的內容。此處 *b 即 a。等價於 a = "programming test";,使指標 a 指向新字串 "programming test"。注意:指標直接賦值字串時,是將字串地址賦給指標。
  4. char *c = ++a;:此時 a 的值為字串 "programming test" 首字元 'p' 的地址。++a 先自增,使 a 指向下一字元 'r',並將此地址賦給 c。故 c 指向 'r'。
  5. a = "talents.";:此為干擾行,c 與 a 無關。
  6. printf("%c\n", *++c);:++c 使 c 指向下一字元 'o',解引用輸出該字元。

因此輸出為字元 o。

在 Ubuntu 下使用 GCC 驗證成功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved