簡體   English   中英

了解C中的內存地址和指針

[英]Understanding memory addresses and pointers in C

我收到了關於我的一個練習問題的以下問題:它確定了由此代碼打印的內容:

#include <stdio.h>
int main(){
    int ids[3] = {100,200,300};
    int *salary, salary1, salary2, *salary3;
    salary1 = ids[0] * ids[1];
    salary = &ids[1] ;
    salary2 = *(ids+1)* *(ids+2);
    salary3 = ids+2;
    printf("*salary = %d\nsalary1 = %d\n", *salary, salary1);
    printf("salary2 = %d\nsalary3 = %p\n", salary2, salary3);
}

我對這段代碼感到有點困惑。 首先,在第4行:

    int *salary, salary1, salary2, *salary3;

如果在行的開頭已使用星號,為什么在salary3的開頭有一個星號?

其次說:

    salary1 = ids[0] * ids[1];

當我們不知道ids[1]的價值時,我們如何確定salary1 ids[1]的價值?

如果在行的開頭已經使用了星號,為什么在salary3的開頭有一個星號?

星號表示下一個變量是指針。 它與以下相同:

int *salary;
int salary1;
int salary2;
int *salary3;

但在一條線上。

當我們不知道ids [1]的價值時,我們如何確定薪水1的價值?

但你確實知道ids的價值[1]。 這是200。

首先,C聲明語法有點令人困惑

int *x, y;

手段x是指向int的指針,y是int。 這是一個混亂的源頭,幾乎每個風格指南都禁止它。

這個

  int ids[3] = {100,200,300};

聲明一個數組。 ids [0] = 100,ids [1] = 200,ids [2] = 300.當數組較小時,只能通過眼睛匹配下標數組內容。 所以這不是數組的正常使用。 要么在全局內存中有大型只讀表,要么在運行時創建一個數組並填充它。 然而,應該沒有問題是ids [1]持有200,這就是C數組語法的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM