将值赋给C int指针

use*_*460 1 c pointers

如果你觉得这个问题非常基础,请原谅我.我试了几个小时,只是似乎不明白为什么我的代码不起作用.我只想将一些int值插入int pointer并打印出来.

int val, x;
int *ptr;  
ptr = malloc(sizeof(int));  

do
{
    scanf("%d", &val);
    *ptr = val;
    ptr++;
}while(val < 20);    


for(x=0; x<5; x++)   //Print values *ptr          
{
    printf("ptr[%d]: %d\n", x, *ptr);
    ptr++;
}
Run Code Online (Sandbox Code Playgroud)

代码可以编译.但输出是错误的. 输入:4 5 6 7 8 20

输出:

ptr[0]: 20
ptr[1]: 4063428
ptr[2]: 62261273
ptr[3]: 134267354
ptr[4]: 4067081
Run Code Online (Sandbox Code Playgroud)

BLU*_*IXY 5

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

int main(void){
    int val, x = 0, i;
    int *ptr, *p;  
    ptr = NULL;  

    while(1== scanf("%d", &val) && val < 20){
        if(NULL!=(p = realloc(ptr, (x+1)*sizeof(*p))))//extend a secure memory
            ptr = p;//Update Now that realloc have successfully extended
        else {
            fprintf(stderr, "realloc error!\n");
            free(ptr);
            exit(-1);
        }
        ptr[x++] = val;
    }  

    for(i=0, p=ptr; i<x; i++){
        printf("ptr[%d]: %d\n", i, *p++);
    }
    free(ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @ user3629249 BLUEPIXY的方式(使用`sizeof(*p)`)比`sizeof(int)`更好,因为如果改变ptr的类型你不需要改变它,例如你想改变你的代码来读取浮点数. (2认同)
  • @ user3629249没有必要添加`""`以跳过`\n`. (2认同)
  • @ user3629249目前代码没有任何区别. (2认同)