标题:结构体指针地址和值的问题
只看楼主
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
回复 10楼 ehszt
我知道是带了下标。我不理解同样是地址。那个&代表的含义又是什么
2017-04-04 16:47
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
以下是引用Emotiona在2017-4-4 16:47:28的发言:

我知道是带了下标。我不理解同样是地址。那个&代表的含义又是什么
c语言的专利  取址符

DO IT YOURSELF !
2017-04-04 16:56
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
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 13楼 Emotiona
对,这是个特殊情况。记住就好,不必深究。
2017-04-04 17:06
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
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 15楼 Emotiona
num是个数组名,sum是个变量名。不一样呀。
2017-04-04 17:38
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
什么都不说了, 今天傻到彻底!!!
2017-04-04 17:47
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
回复 17楼 ehszt
什么都别说了,今天跟个智障一样
2017-04-04 17:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475773-1-1.html




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

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