丶浅唱 发表于 2015-3-29 11:19:59

我就是想不通 所以我来了;

         这行代码中用指针输出的要么是30要么是乱码。。
   求大神给我点提示。。
#include<stdio.h>
#include<stdlib.h>
int main()
{
        int a, *p,i;
        p=(int *)malloc(10);
        for ( i = 0; i < 10; i++)
        {
                a = i;
        }
        p=a;
        for (i = 0; i < 10; i++)
        {
                printf("%d\n", a);
        }
        for (int i = 0; i<10; i++);
        {
                printf("这个数组里面的数据是:%d\n", *(p+i));
        }
        free(p);
        system("pause");
        return 0;
}   

额。。。。。和动态分配地址好像没有关系。。。。

丶浅唱 发表于 2015-3-29 11:41:43

#include<stdio.h>
int main()
{
        int a;
        int *p,i;
        printf("请输入一组整数数据:");
        for(i=0;i<3;i++)
        {
                scanf("%d",&a);
        }
        for (i=0; i<3; i++)
        {
                printf("%d\n", a);
        }
        for (p=a;p<(a+3);p++);
        {
                printf("这个数组里面的数据是:%d\n", *p);
        }
        return 0;
}
这样输出的也是乱码。。。我就不懂了;

stromman 发表于 2015-3-29 12:15:51

#include<stdio.h>
#include<stdlib.h>
int main()
{
      int a, *p,i;
      p=(int *)malloc(10);
      for ( i = 0; i < 10; i++)
      {
                a = i;
      }
      p=a;
      for (i = 0; i < 10; i++)
      {
                printf("%d\n", a);
      }
      for (int i = 0; i<10; i++);
      {
                printf("这个数组里面的数据是:%d\n", *(p+i));
      }
      free(p);
      system("pause");
      return 0;
}   
首先, p=(int *)malloc(10); 你分配10个单位的int的空间,然后用指针p指向这块内存
但是后面的 p=a; 你让原本指向那块内存的指针p又指向数组a,这样做,你之前的malloc就白写了,因为你已经丢失这块动态内存的地址了.
然后再看这堆代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
      int a, *p,i;
      p=(int *)malloc(10);
      for ( i = 0; i < 10; i++)
      {
                a = i;
      }
      p=a;
      for (i = 0; i < 10; i++)
      {
                printf("%d\n", a);
      }
      for (int i = 0; i<10; i++);
      {
                printf("这个数组里面的数据是:%d\n", *(p+i));
      }
      free(p);
      system("pause");
      return 0;
}
看看这个for循环语句:
    for (int i = 0; i<10; i++);
    {
                printf("这个数组里面的数据是:%d\n", *(p+i));
    }
这个for循环语句有一点和其他的for循环语句不同,不同之处就是for语句后面多了个;
for循环后面带分号意味着这是个空循环,

丶浅唱 发表于 2015-3-29 19:39:58

stromman 发表于 2015-3-29 12:15
#include
#include
int main()


十分感谢。。。谢谢我懂了。
页: [1]
查看完整版本: 我就是想不通 所以我来了;