【发布时间】:2017-02-15 23:12:15
【问题描述】:
我收到以下关于我的一个练习题的问题,它说要确定此代码打印的内容:
#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 的值?
【问题讨论】:
-
*仅适用于紧随其后的变量,而不适用于该行的所有变量。 -
因为不是
int* salary等,而是int *salary等。*限定了变量,而不是类型。
标签: c pointers memory-address