鱼C论坛

 找回密码
 立即注册
查看: 1275|回复: 3

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

[复制链接]
发表于 2015-3-29 11:19:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  额。。。。。和动态分配地址好像没有关系。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-29 11:41:43 | 显示全部楼层
#include<stdio.h>
int main()
{
        int a[3];
        int *p,i;
        printf("请输入一组整数数据:");
        for(i=0;i<3;i++)
        {
                scanf("%d",&a[i]);
        }
        for (i=0; i<3; i++)
        {
                printf("%d\n", a[i]);
        }
        for (p=a;p<(a+3);p++);
        {
                printf("这个数组里面的数据是:%d\n", *p);
        }
        return 0;
}
这样输出的也是乱码。。。  我就不懂了;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-29 12:15:51 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
int main()
{
        int a[10], *p,i;
        p=(int *)malloc(10);
        for ( i = 0; i < 10; i++)
        {
                a[i] = i;
        }
        p=a;
        for (i = 0; i < 10; i++)
        {
                printf("%d\n", a[i]);
        }
        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[10], *p,i;
        p=(int *)malloc(10);
        for ( i = 0; i < 10; i++)
        {
                a[i] = i;
        }
        p=a;
        for (i = 0; i < 10; i++)
        {
                printf("%d\n", a[i]);
        }
        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循环后面带分号意味着这是个空循环,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 19:39:58 | 显示全部楼层
stromman 发表于 2015-3-29 12:15
#include
#include
int main()

  十分感谢。。。谢谢  我懂了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表