| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 801 人关注过本帖
标题:结构体指针一问
只看楼主 加入收藏
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
改好了,能运行了,但不明白为何

&(*p[i]).b  不行,要写成  &(*p)[i].b  呢?


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 17:09
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
前面的帖子不是说了。(*p)为在主函数中的p所指向的地址,在这个地址上进行操作,而(*p[i]),[]的优先级高于*,所以他是在二级指针上的操作,相当于让二级指针p加上i,再取所指向的地址,而p的值是一级指针的地址自然不对.
前面的帖子上有一段注释的代码,你可以运行下看他们的地址是多少。

离恨恰如春草,更行更远还生。
2010-03-04 17:19
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
回复 12楼 玩出来的代码
喔,明白了,原来如此。我的 &(*p[i]) 中的 p 被认为是二级指针的
p 了,所以运行出错。

请问有各符号的优先级列表吗?


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 17:34
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
放出最终修改版本,与首页的不一样哟。

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

//函数前置声明
void InputStudent(struct Student * p, int len);
void OutputStudent(struct Student * p, int len);
void Sort(struct Student * p, int len);

//结构体,构建学生结构体
struct Student
{
    int a;
    float b;
    char c[10];
};

//主函数
int main(void)
{
    struct Student * p;
    int len;

    printf("请输入学生的人数:");
    scanf("%d", &len);

    p = (struct Student *) malloc (len * sizeof(struct Student));

    //输入
    InputStudent(p, len);


    //冒泡排序
    Sort(p, len);

    //输出
    OutputStudent(p, len);

    return 0;
}

//输入函数
void InputStudent(struct Student * p, int len)
{
    int i;

    for(i=0; i<len; i++)
    {
        printf("请输入第 %d 个学生的信息:\n", i+1);
        printf("年龄:");
        scanf("%d", &p[i].a);
        printf("成绩:");
        scanf("%f", &p[i].b);
        printf("姓名:");
        scanf("%s", p[i].c);
    }

    return;
}

//输出函数
void OutputStudent(struct Student * p, int len)
{
    int i;

    printf("\n\n学生信息如下:\n");
    for(i=0; i<len; i++)
    {
        printf("第 %d 个学生的信息:\n", i+1);
        printf("年龄: %d ", p[i].a);
        printf("成绩: %f ", p[i].b);
        printf("姓名: %s \n", p[i].c);
    }

    return;
}

//冒泡排序函数
void Sort(struct Student * p, int len)
{
    int i, j;
    struct Student t;
    for(i=0; i<len-1; i++)
    {
        for(j=0; j<len-1-i; j++)
        {
            if(p[j].b < p[j+1].b)
            {
                t = p[j];
                p[j] = p[j+1];
                p[j+1] = t;
            }
        }
    }
}


[ 本帖最后由 lixnkei 于 2010-3-4 22:43 编辑 ]


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-03-04 22:37
快速回复:结构体指针一问
数据加载中...
 
   



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

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