Jer*_*emy -3 c null void-pointers
我正在调用一个通过指针参数返回变量的函数.我不关心这个参数的返回值,也不想让虚拟变量传递给函数.举一个简单的例子,假设函数如下,我不关心,也不想为参数"d"创建一个虚拟变量.
void foo(int a, int b, int* c, int* d)
{
*c = a+b;
*d = a+b+*c;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,NULL指针理论上是一个指向不是任何对象或函数地址的位置的指针.如果将NULL定义如下,那么在此函数中将NULL传递给"d"是否正确?或者这是否会改变内存中第0个元素的内容?
#define NULL ((void *)0)
Run Code Online (Sandbox Code Playgroud)
目标设备是MSP430,我正在使用IAR C. 没有使用操作系统,因此没有实现内存管理
编辑:请注意,我不想创建虚拟变量.此外,如果有一种方法可以欺骗编译器在不改变函数定义的情况下优化"d"参数,这是更可取的.
编辑#2:我宁愿不在函数调用中使用&运算符,因为它会生成我不想生成的低效代码
编辑#3:对于那些在我谈论&运算符时不相信我的人......编译器手册指出"避免使用&运算符来获取局部变量的地址.这主要有两个原因:效率低.首先,变量必须放在内存中,因此不能放在处理器寄存器中.这会导致代码越来越大.其次,优化器不能再认为局部变量不受函数调用的影响."
不,这不对.
执行此操作时,C标准未定义行为.在许多系统上,当foo尝试存储到地址0 时,它将导致错误(某种内存故障).如果没有,那么您将写入数据到地址0,可能会覆盖可能需要的其他内容,所以你的系统可能会在以后失败.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |