汪的爱琪 2023-09-16 13:49 采纳率: 67.5%
浏览 4
已结题

C语言数据结构指针问题

这是我的代码

#include<stdio.h>
typedef struct{
    int length;
    int capacity;
    int *data;
}Seqlist;
Seqlist * Create(int capacity);
void Set(Seqlist * seqlist,int * data);
int main(){
    Seqlist * seqlist = Create(5);
    int data = 999;
    Set(seqlist,&data);
    printf("%d",*(seqlist->data[0]));
    return 0;    
}
Seqlist * Create(int capacity){
    Seqlist * seqlist = NULL;
    seqlist = (Seqlist * )malloc(sizeof(Seqlist));
    memset(seqlist,0,sizeof(Seqlist));    
    seqlist->capacity = capacity;
    seqlist->data = (int *)malloc(sizeof(int));
    printf("Init!\n");
    return seqlist;
}
void Set(Seqlist * seqlist,int * data){
    if(seqlist == NULL || seqlist->data == NULL) return;
    //为了减少阅读量,
    //这里先不做其他健壮性判断了 
    seqlist->data[seqlist->length] = data;
    seqlist->length++;
}

这是出错的错误

img


问题是我创建的是指针数组,那我就可以存入指针,既然是指针就可以指向变量的地址,那这样逻辑就通顺了,我创建指针数组去存指向变量的指针也就可以通过指针数组的下标去*它间接拿到值,但是我的编译却无法通过,请问这是为什么呀,我的逻辑简单点来说就是类似于这样的过程

#include<stdio.h>
 void set(int * a);
int main(){
    int * a[1];
    int b = 1;
    a[0] = &b;
    set(a[0]);
    printf("%d\n",a[0]);
    return 0;
}
void set(int * a){
    printf("%d\t\n",*a[0]);
}

  • 写回答

2条回答 默认 最新

  • 周立很惨 2023-09-16 16:12
    关注

    main函数里边,应该用printf("%d", *(seqlist->data))来打印第一个元素的值,data是一个指向整数数组的指针
    set函数里边seqlist->data[seqlist->length] = *data,同样,data是指向整数数组的指针

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct {
        int length;
        int capacity;
        int *data;
    } Seqlist;
    
    Seqlist *Create(int capacity);
    void Set(Seqlist *seqlist, int *data);
    
    int main() {
        Seqlist *seqlist = Create(5);
        int data = 999;
        Set(seqlist, &data);
        printf("%d", *(seqlist->data));
        free(seqlist->data);
        free(seqlist);
        return 0;
    }
    
    Seqlist *Create(int capacity) {
        Seqlist *seqlist = (Seqlist *)malloc(sizeof(Seqlist));
        memset(seqlist, 0, sizeof(Seqlist));
        seqlist->capacity = capacity;
        seqlist->data = (int *)calloc(capacity, sizeof(int));
        printf("Init!\n");
        return seqlist;
    }
    
    void Set(Seqlist *seqlist, int *data) {
        if (seqlist == NULL || seqlist->data == NULL) return;
        seqlist->data[seqlist->length] = *data;
        seqlist->length++;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 有人会用py或者r画这种图吗
  • ¥15 MOD04_3K图像预处理
  • ¥15 [VASP]关于超胞大小和k 点网格的收敛性测试
  • ¥15 pip下载paddle2onnx离谱错误
  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777