在 C 语言中,通常这就是我们使用指针获取输入的方式,那么为啥它不起作用呢?还是我在某些时候错了?

Posted

技术标签:

【中文标题】在 C 语言中,通常这就是我们使用指针获取输入的方式,那么为啥它不起作用呢?还是我在某些时候错了?【英文标题】:In C language, normally this is how we take input using pointers, then why is it not working though ? Or am I wrong at some point?在 C 语言中,通常这就是我们使用指针获取输入的方式,那么为什么它不起作用呢?还是我在某些时候错了? 【发布时间】:2021-12-31 21:29:57 【问题描述】:

通常我们在使用指针时采用以下方式输入。但是这次结构体是和指针一起使用的。

它就像一个数组一样工作,但在获取大小后不获取输入数字。

    #include<stdio.h>
    #include<stdlib.h>

    struct point
    
        int *data;
        int size;
    ;

    int main()
    
        struct point temp;
        scanf("%d",&temp.size);        

        printf("\n Enter data ---- \n");     
        for(int i=0 ; i<temp.size ; i++)
        
            scanf("%d",(temp.data+i);
        
    
        printf("\n The data is ----- \n");      
        for(int i=0 ; i<temp.size ; i++)
        
            printf("%d",*(temp.data+i));
        
    
        return 0;
    

有人可以帮忙吗....

【问题讨论】:

欢迎来到 SO。我们不仅使用指针,还使用我们为此目的分配的内存地址。您的指针data 未指向任何有效地址。 "它就像一个数组,但是......" 这是因为指针不是数组。数组带有存储值所需的所有内存。指针只带有地址。你的工作是让它指向一个足够大内存的有效地址。通过获取合适变量的地址或动态分配内存。 temp.data 指向哪里? 好的,明白了。感谢您的帮助。 【参考方案1】:

这不是一个完整的答案,但它应该指出你正确 方向。

你认为你的程序的这个稍微修改过的版本(不使用结构)有效吗?

...
int *data;    // no struct used here
int size;

int main()

    scanf("%d",&size);        

    printf("\n Enter data ---- \n");     
    for(int i = 0 ; i < temp; i++)
    
        scanf("%d", (data+i);
    
    ...

【讨论】:

以上是关于在 C 语言中,通常这就是我们使用指针获取输入的方式,那么为啥它不起作用呢?还是我在某些时候错了?的主要内容,如果未能解决你的问题,请参考以下文章

C语言有这个就够了五.指针

C语言指针总结

C语言中“指针”和“指针变量”的区别是啥??

c语言中如何将结构中变量清空

c语言中的指针类型属于原子类型还是结构类型?

c语言中如何通过二级指针来操作二维数组