C中的结构被视为指针

时间:2015-11-19 16:31:12

标签: c pointers struct

这是我的奇怪问题:

我有一些代码在main()之前,我将几个结构声明为全局变量。我在main()中的结构上使用的函数通常需要指向真实参数的指针,所以天真地,我输入,例如。

功能(安培; struct.content);

然后我得到一个错误,说这是错误的参数类型,因为它是 双指针(**)而不是单个指针(*)。然后,当我拿走&符号时 离开,它的作品!换句话说,这些结构被视为已经是指针,我认为这最终会导致代码中的内存分配问题。

我非常感谢任何人都能提供的任何照明!我只是一个科学家,而不是一个真正的程序员,这样的事情不断地让我咬我:(

1 个答案:

答案 0 :(得分:1)

指针指向事物。想象一下,你是一名指挥官,你指着某个人。现在你告诉一名士兵杀死你指向的东西,然后士兵杀了那个人。那个人现在已经死了。

开发人员可以犯的一个常见错误就是继续指着那个已故的人,并命令一名士兵(计算机)询问你仍然指着的人。这成为一个问题,因为这个人实际上已经死了。然后士兵变得非常困惑,并在试图审问一个死人并且没有得到任何回应后开始获得创伤后应激障碍。

enter image description here

现在在你的情况下,排除诸如指针失效(悬空指针),内存管理等问题 - 如果你有一个想要指针的函数,你只需要给它一个指针(或者一个衰减到一个的东西,比如一个数组)。

您可以检查以确保通过检查传入的参数的数据类型实际传递指针。例如,如果您有:

function(some_struct.content);

...然后检查结构的content成员,看看它是否是指针。如果是,您正确地传递了参数,并且这段特定代码没有任何问题(尽管您可能对content指向的数据做错了。) / p>

编译器已经为你做了这个检查,而且这里的逻辑实际上很难搞错(尽管还有很多其他方面你可以用指针犯错,主要是关于他们指向的记忆。)