gpt4 book ai didi

c - 引用指针作为函数的参数并更改其引用值

转载 作者:行者123 更新时间:2023-11-30 17:51:48 25 4
gpt4 key购买 nike

你好,我有一个非常基本的问题,对于初学者来说很困惑

让我说有这样的代码

typedef struct st {
int a;
int b;
} structure

structure gee;
gee.a =3;
gee.b =5;

void foo(void (*st)){
g->a += g->b;
}

所以我想要对函数 foo 做的是 make a = a+b;两者都在结构上。

而且我想使用指针 *st 作为函数 foo 的参数。

我一次又一次地遇到取消引用错误。我的代码有什么问题?我该怎么办??

最佳答案

确保使用正确的类型。 (您很少需要使用 void*。)使用 & 运算符获取地址(创建指向的指针)。

#include <stdio.h>

typedef struct st {
int a;
int b;
} structure; // <--- You were missing a semicolon;

structure g_gee = { 3, 5 }; // This guy is global
// You can't do this, you have to use a struct initializer.
//gee.a =3;
//gee.b =5;

void add_a_b(structure* g) {
g->a += g->b;
}

void print_structure(const char* msg, structure* s) {
printf("%s: a=%d b=%d\n", msg, s->a, s->b);
}

int main(int argc, char** argv) {
structure local_s = { 4, 2 }; // This guy is local to main()

// Operate on local
print_structure("local_s before", &local_s);
add_a_b( &local_s );
print_structure("local_s after", &local_s);

// Operate on global
print_structure("g_gee before", &g_gee);
add_a_b( &g_gee );
print_structure("g_gee after", &g_gee);

getchar();
return 0;
}

输出:

local_s before: a=4 b=2
local_s after: a=6 b=2
g_gee before: a=3 b=5
g_gee after: a=8 b=5

关于c - 引用指针作为函数的参数并更改其引用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com