黑马程序员技术交流社区

标题: 这段代码为啥错误了 [打印本页]

作者: wwf707542865    时间: 2015-10-2 16:37
标题: 这段代码为啥错误了
#include <stdio.h>

struct person{
    char    *name;
    int     age;
    float   high;
};
int main()
{
   
    struct person{
        char    *name;
        int     age;
    };
    struct person f={"father",51};
    printf("father=%s,age=%d\n",f.name,f.age);
    struct person m={"mother",50,160.0f};
    printf("mather=%s,age=%d,high=%.1f\n",m.name,m.age,m.high);
   
    return 0;
}
我定义的struct person m报错了,我初始化多了一个float,难道不能自动往上找,匹配到那个全局结构体么,很疑惑,求解答,谢谢!
作者: HI奋斗    时间: 2015-10-2 16:43
这个肯定不对啊,你main函数里面有定义了一个struct函数,会屏蔽外面的函数, struct person m={"mother",50,160.0f};多了个变量hight去掉160.0f就可以了
作者: Abuzzworld    时间: 2015-10-2 16:53
不会,内部变量会屏蔽外部变量,在main内只会找main内定义的person
作者: 超の    时间: 2015-10-2 16:54
局部变量屏蔽全局变量
作者: 8430110    时间: 2015-10-2 16:59

#include <stdio.h>

/*************************************************
   
全局变量
struct person{
            char    *name;
            int     age;
            float   high;
            };


**************************************************/

int main()
{
   
    struct person1{
        char    *name;
        int     age;
    };
    struct person2{
        char    *name;
        int     age;
        float   high;
    };
    /*****************************
     结构体全局变量和普通变量一样
     遵循就近原则
     ****************************/
    struct person1 f={"father",51};
    printf("father=%s,age=%d\n",f.name,f.age);
    struct person2 m={"mother",50,160.0f};
    printf("mather=%s,age=%d,high=%.1f\n",m.name,m.age,m.high);
    return 0;
}

作者: wwf707542865    时间: 2015-10-2 17:33
HI奋斗 发表于 2015-10-2 16:43
这个肯定不对啊,你main函数里面有定义了一个struct函数,会屏蔽外面的函数, struct person m={"mother",5 ...

哦,这样啊,我还以为可以根据参数来自动匹配呢,谢谢
作者: wwf707542865    时间: 2015-10-2 17:34
8430110 发表于 2015-10-2 16:59
#include

/*************************************************

谢谢,明白了
作者: 杰杰    时间: 2015-10-2 20:14
肯定错,局部结构体把全局结构体屏蔽了。
作者: chensc    时间: 2015-10-3 07:47
学习学习!
作者: 浩润2015    时间: 2015-10-3 10:06
内部的person结构体会自动屏蔽全局person结构体类型,从而在main函数内给person类型变量m多赋值一个高度的值是会报错的。。
作者: liuhao_hm    时间: 2015-10-3 13:24
就近原则




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2