You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用指针函数修改结构体值时出现编译错误的技术求助

问题分析与解决方案

嘿,这个问题其实是个很典型的C语言新手语法错误,咱们来拆解一下:

错误根源

你在调用initVector函数的时候,错误地在函数名前加上了返回类型void——只有在声明或定义函数时才需要指定返回类型,调用函数时完全不需要写这个。

看你出错的代码行:

void initVector(&vec);

这行代码里的void完全多余,编译器会把它当成一个声明的开头,然后看到&符号就无法识别,所以才抛出expected declaration specifiers or '...' before '&' token这个错误。

修正方法

只需要去掉调用语句里的void,改成正常的函数调用即可:

initVector(&vec);

额外小优化

另外,在你的initVector函数里,访问结构体指针成员的写法(*v).x虽然是正确的,但C语言提供了更简洁的语法糖->,可以让代码更易读,修改后的函数如下:

void initVector(vector_t *v) {
    v->x = 10;
    v->y = 20;
}

完整修正后的代码示例

#include <stdio.h>
#include <stdint.h>

typedef struct {
    uint16_t x, y;
} vector_t;

void initVector(vector_t *v) {
    v->x = 10;
    v->y = 20;
}

int main() {
    vector_t vec = {5,10};
    
    printf("%d %d\n init \n", vec.x, vec.y);
    initVector(&vec); // 这里修正了函数调用的写法
    printf("%d %d\n \n", vec.x, vec.y);
    
    return 0;
}

这样编译运行后,就能正确输出修改前后的结构体值了。

内容的提问来源于stack exchange,提问作者Kristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 03:37:35