c – 如何将值传递给整数指针

#include<stdio.h>

int main ()
{
    int *ip;
    printf("Enter a no \n");
    scanf("%d",ip);
    printf("ip=%d",*ip);
}

以上是我的程序,当我运行它时输出

./a.out 
Enter a no 
10
Segmentation fault

我在gdb第6行检查了问题是什么

的scanf( “%d”,腹膜内);

所以我推断ip是一个指向整数的指针,%d期望一个地址值.
虽然我试图将一个整数传递给ip指定的值,所以我认为这是错误的.但在上述情况下,正确的做法是什么.我想使用扫描并为ip指向的地址分配一个整数值(在我的情况下,它丢失了).

解决方法

David Heffernan的解决方案是正确的.但是,如果要使用指针(了解指针的工作原理),则必须使用“malloc”手动分配变量.
#include <stdio.h>
#include <stdlib.h> /* for malloc and free */

int main (void)
{
    int *ip = malloc(sizeof(int)); /* declare and allocate a new int pointer */
    printf("Enter a no \n");
    scanf("%d",ip);
    printf("ip = %d",*ip);

    free(ip); /* free the memory */

    return 0;
}

malloc()和free()位于stdlib.h中.当你声明:

int *ip;

你只需要指定一个指向“无”的指针.所以你必须用malloc()分配必要的内存.之后,* ip指向新的内存位置,ip是新内存位置的地址.

当您不再需要带free()的变量时,必须手动释放内存.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...