C语言中的直接调用与间接调用
我是C语言的新手,我在读指针如何“指向”另一个变量的地址。因此,我尝试了间接调用和直接调用,并收到了相同的结果(正如任何C/C++开发人员所预测的)。这就是我所做的:C语言中的直接调用与间接调用,c,pointers,comparison,invocation,indirection,C,Pointers,Comparison,Invocation,Indirection,我是C语言的新手,我在读指针如何“指向”另一个变量的地址。因此,我尝试了间接调用和直接调用,并收到了相同的结果(正如任何C/C++开发人员所预测的)。这就是我所做的: int cost; int *cost_ptr; int main() { cost_ptr = &cost; //assign pointer to cost cost = 100; //in
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),它仍然在编译时没有返回语句,一切都如预期的那样。也许因为C++编译器会自动插入返回语句,如果忘记了。< p>在“PrtTf(…,*-Cube)”的情况下,“成本”的值被复制到栈中。在这个例子中,如果你调用一个不同的函数,并且“CaseTpTR”指向一个多兆字节的数据结构,那么假设“P/t> < P>”,在PrINTF(…,*成本)中在这种情况下,“cost”的值被复制到堆栈中。虽然在本例中很简单,但想象一下,如果您调用的是另一个函数,并且“cost_ptr”指向一个多兆字节的数据结构。指针表示法涉及两次内存提取(或一次提取和一次写入),而直接调用涉及一次 由于内存访问速度慢(与寄存器中的计算相比;与磁盘上的访问相比,速度快),指针访问将减慢速度
但是,有时只有指针允许您执行所需操作。不要被差异所困扰,在你需要的时候使用指针。但是在不需要指针的时候要避免使用它们。指针表示法涉及两次内存获取(或一次获取和一次写入),而直接调用涉及一次 由于内存访问速度慢(与寄存器中的计算相比;与磁盘上的访问相比,速度快),指针访问将减慢速度
但是,有时只有指针允许您执行所需操作。不要被差异所困扰,在你需要的时候使用指针。但是在不需要指针的时候要避免它们。间接调用和直接调用在不同的地方使用。在您的示例中,首选直接调用。使用指针的一些原因:
- 向函数传递大型数据结构时,可以传递指针,而不是复制整个数据结构
- 如果希望函数能够修改调用函数中的变量,则必须传递指向原始变量的指针。如果按值传递,则被调用的函数将只修改一个副本
- 当您不知道要在编译时传递哪个值时,可以在运行时设置指向正确值的指针
- 动态分配内存块时,必须使用指针,因为存储位置在运行时才知道
- 向函数传递大型数据结构时,可以传递指针,而不是复制整个数据结构
- 如果希望函数能够修改调用函数中的变量,则必须传递指向原始变量的指针。如果按值传递,则被调用的函数将只修改一个副本
- 当您不知道要在编译时传递哪个值时,可以在运行时设置指向正确值的指针
- 动态分配内存块时,必须使用指针,因为存储位置在运行时才知道
- 间接调用和直接调用在不同的地方使用。在您的示例中,首选直接调用。使用指针的一些原因: