C語言 指標的問題

想問一下下面的程式碼哪裡錯了&請解釋一下

int *a,*b;//宣告指標

a=1;//不太懂這個是什麼意思

b=2;

printf("%d",a+b);

會有錯是因為記憶體不能相加嗎?(猜的)

要怎麼改才會對呢?

謝謝

已更新項目:

是因為記憶體位置不能相加嗎?(上面打錯)

2 個解答

評分
  • 9 年前
    最佳解答

    int *a;

    a = 1; 這段就錯了

    //1. 變數

    // int 是整數型別

    int x; //表示定義一個整數型別變數,名稱叫x,未給初值

    x = 3; //賦一個整數值3給整數型別變數x

    printf("%d", x); //列印整數型別變數x的值

    printf("%d", &x); //列印整數型別變數的位址

    // &x 的&是「取址」運算子(address-of operator)

    // (注意與C++裡的int &x;的&「參照」(reference)不同)

    //2. 指標

    //int * 是「指向整數型別變數」的指標

    int *a; // 表示定義一個用來「指向整數型別變數」的指標,名稱叫a,未給初值

    a = &x; // 將整數型別變數x的位址 賦值 給「指向整數型別變數」的指標a

    // 常見的說法就是: 指標a指向變數x

    printf("%d", *a); //列印指標a指向的變數的值

    // *a 的*是「提領」運算子(dereference operator)

    // (注意與上面int *a的*不同)

    3. 如第1、2點,要分清楚&有兩種(C只有一種)跟*有兩種

    可以這樣分

    &的左邊有型別表示定義參照(reference) 例如int &r = x; (只有C++才有)

    &的左邊無型別表示取址(address-of) 例如 &x;

    *的左邊有型別表示定義指標(pointer) 例如int *a = &x;

    *的左邊無型別表示提領(dereference) 例如 *a

    4. 初學指標可能會混亂

    例如

    int *a;

    a = &x;

    int *a = &x;

    有相同結果

    其實應該要看成int*為一種型別:「指向整數型別變數」的型別

    把上面的式子看成

    型別 a;

    a = &x;

    型別 a = &x;

    就不會搞混了

  • 其威
    Lv 7
    9 年前

    指標相加無意義啊...

    你說忠孝東路加中華路會等於什麼?

還有問題?馬上發問,尋求解答。