在这段代码中,我试图传递一个指向结构的指针,然后使用这个指针来处理结构成员,但为什么输出总是显示0?
#include<stdio.h>
#include<string.h>
struct student
{
int go;
} s;
void m();
void main()
{
m(&s);
printf("%d",s.go);
}
void m(struct student *ptr)
{
ptr->go;
}
答案 0 :(得分:3)
struct student
{
int go;
}s;
创建一个全局变量。全局变量初始化为零,除非它们被明确初始化。该陈述相当于:
struct student
{
int go;
};
struct student s = {0};
因此s.go
的值为0
。对m
的调用不会更改任何变量的值。它对输出没有影响。即使删除了对0
的调用,输出也会为m(&s)
。
答案 1 :(得分:1)
全局变量s
已初始化为所有成员0
。
没有更改s.go
的值,因此输出为0
。
答案 2 :(得分:0)
'0'
,并且 char或字符串而不是'\0'
。所以你得到了价值0
。struct student { int go; } s;
答案 3 :(得分:0)
你的问题有各种各样的错误,在这里它们没有特别的顺序:
#include <string.h>
s
到访问结构的函数的需要);你应该删除全局变量(即,使其成为本地变量)并继续将指针结构传递给m()
,以便能够在main()
之外访问它(你在那里)应该声明它)main()
的签名不正确,正如我在对OP的评论中所指出的那样,自然您错过了return 0;
中的main()
声明,因为这个printf()
ptr->go
中使用m()
做任何事情;您没有为其分配任何内容或以其他方式使用它。它打印为零,因为正如其他人所指出的那样,全局变量(因为它们是static
,)是(默认)初始化的以下是更正示例(请注意,如果您希望在修改/设置之前使用它的值,可以按其他人的描述初始化s
):
#include <stdio.h>
struct student
{
int go;
};
void m();
int main(void)
{
struct student s;
m(&s);
printf("%d\n", s.go);
return 0;
}
void m(struct student *ptr)
{
ptr->go = 5;
}