我是C的新手,我正在阅读指针如何“指向”另一个变量的地址。所以我尝试了间接调用和直接调用,并收到了相同的结果(正如任何C / C ++开发人员所预测的那样)。这就是我所做的:
int cost;
int *cost_ptr;
int main()
{
cost_ptr = &cost; //assign pointer to cost
cost = 100; //intialize cost with a value
printf("\nDirect Access: %d", cost);
cost = 0; //reset the value
*cost_ptr = 100;
printf("\nIndirect Access: %d", *cost_ptr);
//some code here
return 0; //1
}
所以我想知道带指针的间接调用是否比直接调用有任何优势,反之亦然?一些优点/缺点可能包括速度,执行操作所消耗的内存量(很可能是相同的)但我只是想把它放在那里),安全(如悬挂指针),良好的编程习惯等 1 有趣的是,我使用的是GNU C编译器(gcc),它仍然在没有return语句的情况下编译,一切都如预期的那样。也许是因为如果你忘了,C ++编译器会自动插入return语句。
答案 0 :(得分:6)
间接和直接调用用于不同的地方。在您的示例中,首选直接调用。使用指针的一些原因:
答案 1 :(得分:1)
指针表示法涉及两次内存提取(或一次提取和一次写入),其中直接调用涉及一次。
由于内存访问速度慢(与寄存器中的计算相比;与磁盘上的访问相比速度快),指针访问会减慢速度。
但是,有时候只有一个指针可以让你做你需要的。不要挂断差异,做在需要时使用指针。但是,如果没有必要,请避免使用指针。
答案 2 :(得分:0)
在“printf(...,* cost)”的情况下,“cost”的值被复制到堆栈。虽然在这个例子中是微不足道的,但想象一下你是否正在调用一个不同的函数并且“cost_ptr”指向一个数兆字节的数据结构。