| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 890 人关注过本帖
标题:自学小白在做习题时遇到不明白的问题,求大神解释下
只看楼主 加入收藏
l23wf1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-1-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
自学小白在做习题时遇到不明白的问题,求大神解释下
不明白p[i]的值为什么一跳出循环就全部变成p[99]的值
程序代码:
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

int main(int argc , char *argv[])
{
    int buf[100];
    char dst[5];
    char *p[100];

    srand(time(NULL));

    int i = 0;
    int n = sizeof(buf)/sizeof(buf[0]);

    //打开文件
        FILE *fp = NULL;
        fp = fopen("aa.txt","w");
        if(fp == NULL)
        {
            perror("fopen");
            return 0;
        }

    for(i = 0;i < n;i++)
    {
        buf[i] = (rand()%100)+1;
        sprintf(dst,"%d\n",buf[i]);
        p[i] = dst;
        printf("p[%d] = %s",i,p[i]);
    }

    printf("p[98] = %s",p[98]);



//写入内容
i = 0;
    while(i < 100)
    {
        fputs(p[i],fp);
        i++;
    }

//关闭文件
    fclose(fp);
    fp = NULL;


    return 0;
}


[此贴子已经被作者于2018-1-15 21:34编辑过]

搜索更多相关主题的帖子: 习题 include int char NULL 
2018-01-15 21:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
p[i] = dst;
都是dst
2018-01-15 21:53
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
    int buf;
    char dst[100][5];
    char *p[100];

    for(i = 0; i < n; i++)
    {
        buf = (rand()%100)+1;
        sprintf(dst[i],"%d\n",buf);
        p[i] = dst[i];
        printf("p[%d] = %s",i,p[i]);
    }
2018-01-15 22:00
l23wf1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-1-15
收藏
得分:0 
回复 2楼 吹水佬
问下为什么dst不会根据循环时buf的变化而变化,我原本是理解为用循环将buf获取的随机值通过sprintf格式化到dst中,然后在循环中用dst赋值给p[i]
2018-01-15 22:30
l23wf1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-1-15
收藏
得分:0 
回复 2楼 吹水佬
是因为*p[100]存放的都是dst的地址所以p[i]跳出循环后所有的值都是dst最后的值的原因吗?好像有点明白了
2018-01-15 22:50
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:20 
dst是个地址
sprintf(dst,"%d\n",buf[i]); 是将buf[i]的数值存放到dst这个地址的空间。
dst这个地址没变,只是他指向的空间内容变了。
p[i]是指针数组,p[i]=dst,所有数组元素都是同一个地址、都指向同一个数据。
2018-01-16 05:50
l23wf1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-1-15
收藏
得分:0 
回复 6楼 吹水佬
明白了。谢谢!
2018-01-16 15:35
快速回复:自学小白在做习题时遇到不明白的问题,求大神解释下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.169464 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved