c - 人们觉得 C 指针有什么困难?

标签 c pointers

<分区>

从此处发布的问题数量来看,很明显人们在了解指针和指针算法时遇到了一些相当基础的问题。

我很想知道为什么。它们从来没有真正给我带来过重大问题(尽管我第一次了解它们是在新石器时代)。为了更好地回答这些问题,我想知道人们觉得困难的地方。

那么,如果您正在为指针苦苦挣扎,或者您最近突然“明白了”,那么指针的哪些方面给您带来了问题?

最佳答案

当我第一次开始使用它们时,我遇到的最大问题是语法。

int* ip;
int * ip;
int *ip;

都是一样的

但是:

int* ip1, ip2;  //second one isn't a pointer!
int *ip1, *ip2;

为什么?因为声明的“指针”部分属于变量,而不属于类型。

然后使用非常相似的符号取消引用:

*ip = 4;  //sets the value of the thing pointed to by ip to '4'
x = ip;   //hey, that's not '4'!
x = *ip;  //ahh... there's that '4'

除非你真的需要一个指针...然后你使用一个符号!

int *ip = &x;

一致性万岁!

然后,显然只是为了成为 SCSS 并证明他们有多聪明,许多库开发人员使用指针到指针到指针,如果他们期望这些东西的数组,那么为什么不只传递一个指针也是如此。

void foo(****ipppArr);

要调用它,我需要指向整型指针的指针数组的地址:

foo(&(***ipppArr));

六个月后,当我必须维护这段代码时,我会花更多的时间去弄清楚这一切意味着什么,而不是从头开始重写。 (是的,可能是语法错误——我已经有一段时间没有用 C 语言做过任何事情了。我有点想念它,但后来我有点受虐狂)

关于c - 人们觉得 C 指针有什么困难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4025768/

相关文章:

使用 void* 的 C 队列实现 - 好的还是坏的做法?

c++ - 在屏幕上输出矩形?

在 Windows 上从 .C 文件创建 .exe

c++ - 在声明行处查看未声明的错误

c - (void*) 在类型转换中意味着什么?

c++ - 我可以获得指向当前迭代器值的指针吗

c - 真实分配 : invalid next size while splitting a line

c - 预处理阶段和多个文件(基础)

c - 判断一个字符是否是正斜杠

c - scanf ("%d", char*) - char-as-int 格式字符串?