-5

为什么这总是返回一个 (nil) 或 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;
}
4

2 回答 2

3

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

doSomething(pointerA,pointerB);

在C中不能改变pointerA,不管是什么类型pointerA。所以如果你试图在函数内部改变它,你应该做

pointerA = doSomething(pointerA, pointerB);

或将指针传递给指针

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

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

  1. 您正在使用同名的函数参数隐藏全局变量。
  2. 也许您认为更改函数中的指针会更改调用代码中的值。这是 C 语言中常见的混淆。
于 2013-06-23T18:41:38.773 回答
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;
}

请注意:

  • 用于&将结构的地址作为参数传递给函数
  • 在函数中使用 -> 来使用一个指向的结构内的成员
  • 使用“typedef”来避免到处都说“struct myexample”
于 2013-06-23T19:01:50.100 回答