调用指针函数修改结构体值时出现编译错误的技术求助
问题分析与解决方案
嘿,这个问题其实是个很典型的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
相关产品推荐
相关产品推荐

