为什么这个结构体传不过去?C语言小白
#include <stdio.h>int inputStudentsNum(struct student *stu, int n);
int inputStudentsNum(struct student *stu, int n){
return n;
}
int main() {
int n;
struct student{
char num;
int score;
}stu;
n=inputStudentsNum(stu,n);
return 0;
}
本帖最后由 傻眼貓咪 于 2022-5-4 12:23 编辑
声明和定义顺序不对
一般都是:声明 -> 调用 -> 定义 或 声明 -> 定义 -> 调用(声明一定要最前面,这样一来编译器才知道有这个东西存在) 傻眼貓咪 发表于 2022-5-4 12:21
声明和定义顺序不对
感觉这代码有点迷惑...
楼主要实现什么, 我不理解 柿子饼同学 发表于 2022-5-4 12:22
感觉这代码有点迷惑...
楼主要实现什么, 我不理解
楼主 2行就想调用结构体 student,但是在10行才声明定义,试问编译器怎么知道 student 是什么鬼? 柿子饼同学 发表于 2022-5-4 12:22
感觉这代码有点迷惑...
楼主要实现什么, 我不理解
只是学习一下把结构体当作参数传递到函数中,但是没弄明白 本帖最后由 柿子饼同学 于 2022-5-4 12:57 编辑
BudingZY 发表于 2022-5-4 12:39
只是学习一下把结构体当作参数传递到函数中,但是没弄明白
额 , 可以用typedef简化一下 , 然后结构体定义应该写在函数前面
不然编译器不知道
(我写的, 头文件可以换成别的)
#include <bits/stdc++.h>
using namespace std;
typedef struct student{
char num;
int n;
}stu;
int InputStudentNum(stu * stu, int n){
return n;
}
int main(){
stu *s;
int n = InputStudentNum(s, 2);
printf("%d", n);
return 0;
}
这个就是直接把 student 这个结构体定义为一个新的数据类型, 就好像 int 一样
这样就可以直接用 stu * s 来初始化一个结构体
可以看一下我改的
#include <stdio.h>
// 结构体需定义在前面,让编译器知道你有这个结构体
struct student{
char num;
int score;
};
int inputStudentsNum(struct student *stu, int n);
int inputStudentsNum(struct student *stu, int n){
return n;
}
int main() {
struct student stu;
int n;
n=inputStudentsNum(&stu,n);
return 0;
}
页:
[1]