c语言结构体指针赋值



```c
#include
#include
struct STU{
    int *score;
}stu;
int main(){
    stu.score=(int *)malloc(10*sizeof(int));
    for(int i=0;i<3;i++){
        scanf("%d",stu.score+i);
    }
    for(int i=0;i<3;i++){
        printf("%d",stu.score);
        stu.score++;
    }
    return 0;
}

//输入1 2 3,输出1 2 3 

```

有啥问题啊?
第二个for循环不好,16行stu.score++大问题。你这么搞以后,这个结构就基本废了,你把申请的内存块的首地址弄丢了,而且printf语句也不对
printf("%d",stu.score[i]);

printf("%d",stu.score);这里错了
输入的时候你知道要+i
输出也应该+i呀,你这一直都输出同一个地址

首先malloc申请的空间最好释放掉,这是一个习惯问题,剩下的鹦鹉老哥说的很对,stu.score++大问题,不过如果你想沿用你当前这种写法的话可以在打印stu.score的地方加个‘*’,printf("%d",*stu.score);

for(int i=0;i<3;i++){
printf("%d ",*(stu.score+i));
// stu.score++;
}
free(stu.score);

供参考:

#include <stdio.h>
#include <stdlib.h>
struct STU {
    int* score;
}stu;
int main() {
    stu.score = (int*)malloc(10 * sizeof(int));
    for (int i = 0; i < 3; i++) {
        scanf("%d", stu.score + i);
    }
    for (int* p = stu.score; p < stu.score + 3; p++) {
        //for (int i = 0; i < 3; i++) {
        printf("%d ", *p);
        //printf("%d", *stu.score);
        //stu.score++;
    }
    return 0;
}

//输入1 2 3,输出1 2 3