返回函数中的指针

时间:2013-06-23 18:34:06

标签: c

为什么这总是返回一个(零)或NULL指针?即使指针A不是NULL指针?

struct example *doSomething(struct example*, struct example*);
struct example *pointerA;
struct example *pointerB;
...
main(){
    ...
    doSomething(pointerA,pointerB);
    ...
}
struct example* doSomething(struct example *pointerA,struct example *pointerB)
{
    ...
    return pointerA;
}

2 个答案:

答案 0 :(得分:3)

你的问题确实没有足够的代码,但这一行

doSomething(pointerA,pointerB);
无论pointerA是什么类型,

都无法在C中更改pointerA。所以如果你试图在函数内部进行更改,你应该做

pointerA = doSomething(pointerA, pointerB);

或传递指向指针的指针

...
    doSomething(&pointerA, pointerB);
...
}
struct example* doSomething(struct example **ppa, struct example *pb)
{
    ...
    *ppa = something;
}

我认为主要的困惑来自两点:

  1. 您正在使用具有相同名称的函数参数来遮蔽全局变量。
  2. 也许您认为更改函数中的指针会更改调用代码中的值。这是C中常见的混淆。

答案 1 :(得分:0)

这是一个你可能会觉得有用的小例子

#include <stdio.h>


struct myexample {
    int a;
    int b;
};

typedef struct myexample example;

example  add(example *first, example *second) {
    example retval;
    retval.a = first->a + second->a;
    return retval;
}

int main() {
    example x1,x2,result;
    x1.a=4;
    x2.a=3;
    result=add(&x1,&x2);
    printf("%d", result.a);
    return 0;
}

请注意:

  • 使用&将结构的地址作为参数传递给函数
  • 在函数中使用 - &gt;使用指向太多结构的成员
  • 使用“typedef”以避免在任何地方说“struct myexample”