| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6384 人关注过本帖
标题:random和rand
取消只看楼主 加入收藏
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
 问题点数:0 回复次数:11 
random和rand

rand是个伪随机数,拿当前时间做种子,获取的数是4位数,如何随机获取1到6,且1到6这6个数机会相等,
random(int n)是获取[0,n)的随机数, 我机器运行的时候一直提示 'random' : undeclared identifier
请教高手什么原因 ,头文件有<stdlib.h>了
我搜了下他们的用法,机器运行不了random的,也没能弄明白!先谢了

搜索更多相关主题的帖子: rand 
2006-12-07 20:31
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 
还是不行 估计是我没装好,我的MSDN都没 真惨,下次重装下

2006-12-07 21:19
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));
}


2006-12-07 21:26
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 
//q=(int *)realloc(q,sizeof(int));//重复分配空间 不分配空间怎么存直,我是输入一个数字就申请一个空间存放,为的是不申请多的空间,当然这个是我自己的意思,申请多点空间不会有什么,另外, //*q=n;//毫无意义 是把动态数组的第一个元素存放我输入的数字个数,怎么会毫无意义呢?

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

void main()
{
int *p=NULL,m,*q=NULL;
int n=0,i;
p=(int *)malloc(sizeof(int)); //申请存放个数和结束标志空间
// p++;
q=p;
while(scanf("%d",&m)!=0) //输入字符则结束循环
{
//q=(int *)realloc(q,sizeof(int));//重复分配空间 realloc保证了分配的空间和前面申请的连续

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

[/QUOTE]

2006-12-07 22:08
xiaona521
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-10-23
收藏
得分:0 
斑竹你可以调试下我上面的代码,也许会知道快些

2006-12-07 22:09
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
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
快速回复:random和rand
数据加载中...
 
   



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

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