大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你为什么要在CArry::CArry(unsigned int length)前写个void?那是非法的,删掉它便可!
成都网站制作、网站建设,成都做网站公司-创新互联已向上千多家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
另:函数中的逻辑似乎不对,据题意应该是:
if (length0)
int *m_Data=new int[m_nLength];
或者
int *m_Data;
if (length0)
m_Data=new int[m_nLength];
else
m_Data=NULL;
才对。不然,将会产生给未定义指针赋值的运行时错误!
long *buffer; // 定义一个动态数组
...malloc.... // 动态分配 1000 单元
...realloc.... // 再添加 分配 1000 单元
free( buffer ); // 取消 单元
=============================================
#include stdio.h
#include malloc.h
#include stdlib.h
void main( void )
{
long *buffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf( "Size of block after malloc of 1000 longs: %u\n", size );
/* Reallocate and show new size: */
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
exit( 1 );
size = _msize( buffer );
printf( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
exit( 0 );
}
应该这样
void CreateArray(int n, int** a)
{
*a = (int *) malloc (sizeof(int) *n);
}
第一个问题
malloc()函数是申请堆内存的函数,括号内参数是内存大小,单位是字节数。函数返回的是void类型的指针,所以在赋值给int类型的指针pArr时要进行强制转换。因为malloc本来返回的就是指针,指向内存空间的首地址,用不着再前面加。
第二个问题
i和for括号里的i是相同的,这是个for循环,循环len次,然后需要你自己输入len个值,存储在pArr[i]中。每次循环i都自加1,是不相同的。
for循环括号内第一句 i=0 是将整数 i 赋值为0;
然后第二句是判断语句,判断 ilen 是否为真,如果为真,就执行下面的scanf语句,输入值。输入完成后执行第三句 i = i+1,然后执行第二局进入下一轮判断 。若是 ilen 为假,则跳出for循环,执行下面的printf语句
关于在 C 语言中创建动态数组的问题,可以使用 C 语言提供的库函数:malloc( ) 来创建动态数组。即可以使用如下代码进行实现:
#include stdlib.h /* 动态分配内存的库函数 malloc( )、以及后面用到的 free( ) 释放内存库函数在此头文件中有函数原型定义,故必须包含该头文件 */
#include stdio.h
void main( )
{
int num, * p ;
printf("Please input a number :\n" ) ;
scanf("%d", num) ;
p = (int *)malloc(num) * sizeof(int) ; /* 根据前面从键盘上输入的数字 num,动态分配一个整型动态数组 p */
......
......
free( p ) ; /* 应用程序结束前务必释放内存 */
}
至于说中间的程序结构的架构,就需要靠自己上机编写、并亲自调试程序了。因为任何一个程序的最终正确运行结果(可以说是100%的程序),都是必须在编程环境下面调试出来的,而不是在纸上写出来就能够保证通过的。
在纸上写出来的部分源代码,只能够是给你提供一个大致的编程思路供参考。
intmain(void)
{
int*number,n,m,i;
printf("thetotalnumbersis:");
scanf("%d",n);
printf("backm:");
scanf("%d",m);
number=(int*)malloc(n*sizeof(int));
printf("input%dintegers:",n);
for(i=0;in;i++)
{
scanf("%d",number[i]);
}
扩展资料
动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。
动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。使用动态数组的优点是可以根据用户需要,有效利用存储空间。