c - 使指针指向任何内容的最佳方法

标签 c pointers

我们都知道流行的指针 NULL 赋值,例如:

int *p = NULL;

int *p = 0;

我们总是应该在取消引用指针之前检查指针值,以防止程序崩溃。

1.) 但是有没有更好的方法来使指针无效?

2.) 我知道下面的语句与使指针无效没有什么不同(但毫无意义),因为它只会向指针变量写入“0”,但有人告诉我使用它来获得更好的代码编译器兼容性。这是真的吗?我觉得这没有任何意义?

memset(&p, 0, size(p));

最佳答案

Best ways to make a pointer point to nothing

int *p = NULL;
<小时/>

NULL定义于 <stddef.h>作为实现定义的空指针常量。给定的实现可能有多个空指针常量

所有空指针常量都将与0进行比较和彼此。 *p = 0;还将设置p空指针常量,通常与 *p = NULL; 相同

But are there any better way to nullify your pointers?

还有其他方法,但不是更好。

一些风格指南提倡*p = 0; 。最重要的是传达代码的清晰度。使用您所在团队的编码标准的风格。最好保持团队风格的统一。

<小时/>

memset(p, 0, size(p));是错的。应该是memset(&p, 0, size(p));零填充p@rodrigo

关于c - 使指针指向任何内容的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874836/

相关文章:

c++ - 指向成员函数声明/使用问题的 Variadic 模板指针

C - 赋值中不兼容的类型 - 结构和字符数组

android - 澄清函数调用

c - 试图创建一个二维列表,但一行的第一个元素将最后一行的最后一个元素更改为所述元素

c - 将数字四舍五入为 int 大小边界字节数的方法

将方程转换为 cnf,以便使用 sat 求解器

c - 为什么 ATOI 在此代码中返回 0?

c - 为什么这个 djb2 实现循环终止?

c++ - 在包含对象指针的数组中释放内存的正确方法

c - 用 C 返回数组,不同的方法