| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5661 人关注过本帖
标题:结构体指针地址和值的问题
取消只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:18 回复次数:10 
结构体指针地址和值的问题
#include<stdio.h>
#include<malloc.h>

typedef struct
{
    int num[15];
    char name[15];
    float score[3];
    double aver;
    double sum;
}Stu;

int input (Stu* p)
{
    int n, i, j;
    printf("please input N students information!\n");
    scanf("%d", &n);
    p=(Stu* )malloc(n * sizeof(Stu));
    for (i = 0; i < n ; i++, p++)
    {
        printf("input score of student%d\n", i + 1);
        scanf("%d%s",&p[i].num, p[i].name);printf("%d    %s  ",*p[i].num, p[i].name);    一直都没想明白。输入&p[i].num,为啥输出的时候要加*号才是p[i].num的值。p[i].name则不用,因为他是字符串
        for (j = 0; j < 3; j++)
        {scanf("%f", &p[i].score[j]);printf("%7.2f", p[i].score[j]);}        而这里的p[i]p[j]也要&,因为它是浮点数。为啥输出就不需要加*,有点不明白。麻烦大牛帮忙解析下。不然没法继续做题啊。谢谢!!!
    }
    return n;
}
int main ()
{
    int n;
    Stu St, *Sp;
    n=input(&St);
    //Handle(Sp, n);
}
搜索更多相关主题的帖子: 结构体 double please include 
2017-04-04 12:13
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 3楼 九转星河
我考虑到过,在函数开辟空间和主函数开辟空间的问题。我现在想要解决的是哪个地址和值的问题。没弄明白,希望你给我讲解下,谢谢
2017-04-04 13:46
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 5楼 九转星河
前面是头晕了,把指针数组想成一位数组了。scanf("%f", &p[i].score[j]);printf("%7.2f", p[i].score[j]);    这句又是怎么理解的。和指针数组不一样
2017-04-04 15:04
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 6楼 ehszt
把申请空间放前面了  scanf("%f", &p[i].score[j]);printf("%7.2f", p[i].score[j]);    这句又是怎么理解的,只有这样才能引用结构体里面的score元素
void input (Stu* p, int n)
{
    int i, j;

    for (i = 0; i < n ; i++, p++)
    {
        printf("input score of student%d\n", i + 1);
        scanf("%d%s",p[i].num, p[i].name);printf("%d    %s  ",*p[i].num, p[i].name);
        for (j = 0; j < 3; j++)
        {scanf("%f", p[i].score[j]);printf("%7.2f", p[i].score[j]);}
    }
}
int main ()
{
    int n;
    Stu *St;
    printf("please input N students information!\n");
    scanf("%d", &n);
    St=(Stu* )malloc(n * sizeof(Stu));
    input(St, n);
    printf("%d", *St->num);
    //Handle(Sp, n);
}
2017-04-04 15:08
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 3楼 九转星河
我考虑到过,在函数开辟空间和主函数开辟空间的问题。我现在想要解决的是哪个地址和值的问题。没弄明白,希望你给我讲解下,谢谢
2017-04-04 15:10
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 10楼 ehszt
我知道是带了下标。我不理解同样是地址。那个&代表的含义又是什么
2017-04-04 16:47
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 10楼 ehszt
这句不加地址也是正确的scanf("%d%s",p[i].num, p[i].name);  因为*p本来就是指针 p[i]就相当于指针数组的地址  再加&我不知道为啥。而且加了地址也是正确的
2017-04-04 17:04
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 14楼 ehszt
还有就是这个Handle函数里面是直接给地址赋值,输出。上面的input函数是给地址输入,*p输出的。为毛会这样头都晕了
上面的num是int型。下面的sum是double型。引用方式不一样。int 必须要加*不然是地址。 难道float和double处理方式和字符串一样吗?
void Handle (Stu* p, int n)
{
    int i=0, j;
    p[i].sum = 2.0;
    printf("%d", *p[i].num);
    printf("%lf", p[i].sum);

}
2017-04-04 17:16
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 5楼 九转星河
还有就是这个Handle函数里面是直接给地址赋值,输出。上面的input函数是给地址输入,*p输出的。为毛会这样头都晕了
num是int型。sum是double型。引用方式不一样。int 必须要加*不然是地址。 难道float和double处理方式和字符串一样吗?
void Handle (Stu* p, int n)
{
    int i=0, j;
    p[i].sum = 2.0;
    printf("%d", *p[i].num);
    printf("%lf", p[i].sum);

}

代码:
程序代码:
#include<stdio.h>
#include<malloc.h>

typedef struct
{
    int num[15];
    char name[15];
    float score[3];
    double aver;
    double sum;
}Stu;

void input (Stu* p, int n)
{
    int i, j;

    for (i = 0; i < n ; i++)
    {
        printf("input score of student%d\n", i + 1);
        scanf("%d%s",&p[i].num, p[i].name);
        for (j = 0; j < 3; j++)
        scanf("%f", &p[i].score[j]);
    }
}

void Handle (Stu* p, int n)
{
    int i, j;

    for (i = 0; i < n; i++)
    {p[i].sum = 2.0;
    printf("%d", *p[i].num);
    printf("%lf", p[i].sum);
    }


}

int main ()
{
    int n;
    Stu *St;
    printf("please input N students information!\n");
    scanf("%d", &n);
    St=(Stu* )malloc(n * sizeof(Stu));
    input(St, n);
    Handle(St, n);
    free(St);
}
2017-04-04 17:37
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
什么都不说了, 今天傻到彻底!!!
2017-04-04 17:47
快速回复:结构体指针地址和值的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018930 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved