rand是个伪随机数,拿当前时间做种子,获取的数是4位数,如何随机获取1到6,且1到6这6个数机会相等,
random(int n)是获取[0,n)的随机数, 我机器运行的时候一直提示 'random' : undeclared identifier
请教高手什么原因 ,头文件有<stdlib.h>了
我搜了下他们的用法,机器运行不了random的,也没能弄明白!先谢了
rand是个伪随机数,拿当前时间做种子,获取的数是4位数,如何随机获取1到6,且1到6这6个数机会相等,
random(int n)是获取[0,n)的随机数, 我机器运行的时候一直提示 'random' : undeclared identifier
请教高手什么原因 ,头文件有<stdlib.h>了
我搜了下他们的用法,机器运行不了random的,也没能弄明白!先谢了
对了 斑竹我上次问了个动态数组的问题 现在写得差不多了 可不知道为什么输入的第一个数字会变成了野数,后面的数都可以打出来,程序:帮我调试下,我找了一下午,不知道哪出问题了:
#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));
}
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));
}
不会吧
#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
相关函数: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);
}
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);