我正在调用一个通过指针参数返回变量的函数。我不关心这个参数的返回值,也不想制作一个虚拟变量来传递给函数。为了一个简单的例子,假设函数如下,我不关心,也不想为参数“d”做一个虚拟变量。
void foo(int a, int b, int* c, int* d)
{
*c = a+b;
*d = a+b+*c;
}
我知道 NULL 指针在理论上是指向不是任何对象或函数地址的位置的指针。如果 NULL 被定义如下,那么在这个函数中将 NULL 传递给“d”是否正确?或者这会改变内存中第 0 个元素的内容吗?
#define NULL ((void *)0)
目标设备是 MSP430,我使用的是 IAR C。没有使用操作系统,因此没有实现内存管理
编辑:请注意,我不想创建一个虚拟变量。此外,如果有一种方法可以欺骗编译器以优化“d”参数而不更改函数定义,那么这是可取的。
编辑#2:我宁愿不在函数调用中使用 & 运算符,因为它会生成我不想生成的低效代码
编辑#3:对于那些在我谈论 & 运算符时不相信我的人......编译器手册指出“避免使用 & 运算符获取局部变量的地址。这效率低下主要有两个原因。首先,变量必须放在内存中,因此不能放在处理器寄存器中。这会导致代码更大更慢。其次,优化器不能再假设局部变量不受函数调用的影响。