seglex 发表于 2019-9-14 19:59:26

C语言的问题,请教大神

# include <stdio.h>
# include <malloc.h>
int main(void)
{
        int i=1;
        int j;
        int *p;
       
        p=(int*)malloc(i*sizeof(int));
        printf("输入&p的值");
        scanf("%d",&p);
        j=*p;
        printf("*p的值%d\n",j);
}
这段代码中如果直接输出为
printf("%d",p);的话就可以输出p的值,
*p不是对变量p所指向的内存操作吗?为什么会出错

jackz007 发表于 2019-9-15 00:29:47

本帖最后由 jackz007 于 2019-9-15 00:42 编辑

    这一句有错误:

      scanf("%d",&p);

    因为 p 已经是指针了,所以,不应该再用取址操作符了。
    应该改成这样:

      scanf("%d", p);

    给你一个不会出错的例子:

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

int main(void)
{
      int i = 1 , j , k , * p                           ;

      printf("\n")                                        ;
      printf("\t\t你准备输入几个整数:")                  ;
      scanf("%d" , & i)                                 ;
      p = (int *) malloc(i * sizeof(int))               ;
      printf("\n")                                        ;
      printf("\t\t下面分别键入这 %d 个整数. . .\n" , i)   ;
      for(k = 0 ; k < i ; k ++) {
                printf("\t\t")                              ;
                scanf("%d" , & p)                        ;
      }
      printf("\n")                                        ;
      printf("\t\t以下是这 %d 个整数\n" , i)            ;
      for(k = 0 ; k < i ; k ++) printf("\t\t%d\n" , p) ;
      free(p)                                             ;
}


      如果只需要输入 1 个数据:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
      int * p                                             ;

      p = (int *) malloc(sizeof(int))                     ;
      printf("\n")                                        ;
      printf("\t\t输入 & p 的值:")                     ;
      scanf("%d" , p)                                     ;
      printf("\n")                                        ;
      printf("\t\t* p 的值 = %d\n" , * p)               ;
      free(p)                                             ;
}
页: [1]
查看完整版本: C语言的问题,请教大神