| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6386 人关注过本帖
标题:random和rand
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
已经调试过了,没有任何输出结果.

倚天照海花无数,流水高山心自知。
2006-12-07 22:10
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 

不会吧
#include <stdio.h>
#include <stdlib.h>


void main()
{
int *p=NULL,m,*q=NULL;
int n=0,i;
p=q=(int *)malloc(2*sizeof(int)); //申请存放个数和结束标志空间
// p++;
while(scanf("%d",&m)!=0) //输入字符则结束循环,也就是输入任何字母结束输入
{
q=(int *)realloc(q,sizeof(int));
p++;
*p=m;
n++;
}
*q=n; //动态数组第一个元素为数字个数
for(i=0;i<=n;i++)
printf("%d ",*(q+i));
}
输入 1 2 3 4 5 e(任何一个字母代表结束)
输出 5 -33686019 2 3 4 5


2006-12-07 22:27
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
我运行了 没有错误

羊肉串 葡萄干 哈密瓜!!
2006-12-07 22:54
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 
奇怪了,我现在知道我对realloc函数理解有误,倒是你怎么调出来没错误 该睡了,明天还一堆事,明天继续讨论,谢谢各位抽时间给小弟看程序了!

2006-12-07 22:58
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 

相关函数:malloc, calloc, free, brk
表头文件:#Include <stdlib.h>
函数定义:void *realloc(void *ptr, size_t size)
函数说明:参数ptr为指向先前由malloc()、calloc()、realloc()所返回的内存指针, 而参数size()为新配置的内存大小 ,其值可比原内存大或小。 若小,内存内容并不会改变,且返回指针为原来内存启起地址;但若大,则realloc()不一定会返回原先的指针,原先的内容虽不会改变,但新多出的内存则未设置初值。若是参数ptr指针为NULL,则调用相当于malloc(size);若参数size为0, 此调用相当于free(ptr)
返回值 :成功返回指针, 失败返回NULL


范例:
#Include <stdlib.h>
main()
{
char *ptr1=malloc(10);
char *ptr2;

memset(ptr1, 'A', 10);
*(ptr1+10)='\0';

printf("before realloc: ptr= %x [%s]\n", ptr1, ptr1);

ptr2=realloc(ptr1, 40960);

printf("after realloc: ptr= %x [%s]\n", ptr2);
}


2006-12-07 23:00
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 

realloc 可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变。当然,对于缩小,则被缩小的那一部分的内容会丢失。realloc 并不保证调整后的内存空间和原来的内存空间保持同一内存地址。相反,realloc 返回的指针很可能指向一个新的地址。
所以,在代码中,我们必须将realloc返回的值,重新赋值给 p :
p = (int *) realloc (p, sizeof(int) *15);

甚至,你可以传一个空指针(0)给 realloc ,则此时realloc 作用完全相当于malloc。
int* p = (int *) realloc (0,sizeof(int) * 10); //分配一个全新的内存空间,

这一行,作用完全等同于:
int* p = (int *) malloc(sizeof(int) * 10);


2006-12-07 23:01
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

编译器的问题


羊肉串 葡萄干 哈密瓜!!
2006-12-07 23:12
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
以下是引用nuciewth在2006-12-7 22:10:56的发言:
已经调试过了,没有任何输出结果.

那你肯定输入的是 0了
要输入字母才行


羊肉串 葡萄干 哈密瓜!!
2006-12-07 23:23
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
以下是引用mp3aaa在2006-12-7 23:23:59的发言:

那你肯定输入的是 0了
要输入字母才行

while(scanf("%d",&m)&&m!=0)
着样就可以拉吧


羊肉串 葡萄干 哈密瓜!!
2006-12-07 23:26
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 

终于搞好了
题目是输入一组数字,存放在动态数组,数组第一个元素是输入数字个数,输入时以字母结束输入:
#include <stdio.h>
#include <stdlib.h>
#define M 10

void main()
{
int *p=NULL,m;
int n=0,i=0;
p=(int *)malloc(sizeof(int)); //申请存放个数和结束标志空间
*p=NULL;
while(scanf("%d",&m)!=0) //输入字符则结束循环
{
i++;
n++;
p=(int *)realloc(p,(1+n)*sizeof(int));
p[i]=m;
}

*p=n; //动态数组第一个元素为数字个数
for(i=0;i<=n;i++)
printf("%d ",*(p+i));
}


2006-12-08 18:20
快速回复:random和rand
数据加载中...
 
   



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

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