使用指针从地址读取值 - C 编程

Read value from adress with pointers - C programming

在我的程序中,我想输入一些数字,直到输入0。当我输入0时,程序必须停止并按顺序显示数字。快完成了,但我有一个问题。我不能使用 array,这是禁止的。

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

int main()
{
    int number;
    int *ptr;
    int i = 0, j = 0;

    ptr = &number;

    number = (int*)malloc(2000);

    do{
        printf("Enter a number : ");
        scanf("%d",ptr);

        printf("\n######\n");
        printf("%d. number = %d \t%p\n",i+1,*(ptr),(ptr+i));
        printf("\n######\n");
        i++;
    } while(((number)) != 0);

    printf("\n!!!!############!!!!\n");
    for(j = 0 ; j < i; j++){
        number=number+j;
        printf("%d. number = %d \t%p\n",j+1,(number),&(number));
    }
    return 0;
}

你的代码有很多问题。我认为你尝试了一些对你现在的理解水平来说太具有挑战性的事情。

您应该从头开始学习指针,并确保您了解 *& 运算符。试着写一些简单的小程序,这样你就能很好地掌握它们。

从那里您可以继续学习 scanfmalloc,因为它们非常依赖指针。

这是您的代码的工作版本:

int main()
{
    int* number;      // this is should be a pointer
    //int *ptr;
    int i = 0, j = 0;

    //ptr = &number;

    number = (int*)malloc(2000);

    do{
        printf("Enter a number : ");

        // scan an integer into the ith place in memory
        //     after the address pointed to by "number"
        scanf("%d",number+i);   //number+i is already an address, don't use &

        printf("\n######\n");
        printf("%d. number = %d \t%p\n",i+1,*(number+i),number+i);
        printf("\n######\n");
        i++;
        // need to use a -1 since we incremented i
    }while(*(number+i-1) != 0);

    printf("\n!!!!############!!!!\n");
    for(j = 0 ; j < i; j++){
        //=number+j;
        printf("%d. number = %d \t%p\n",j+1,*(number+j),number+j);
    }
    return 0;
}