[英]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.