你為什么要在CArry::CArry(unsigned int length)前寫個void?那是非法的,刪掉它便可!
成都網(wǎng)站制作、網(wǎng)站建設(shè),成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向上千多家企業(yè)提供了,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。
另:函數(shù)中的邏輯似乎不對,據(jù)題意應(yīng)該是:
if (length0)
int *m_Data=new int[m_nLength];
或者
int *m_Data;
if (length0)
m_Data=new int[m_nLength];
else
m_Data=NULL;
才對。不然,將會產(chǎn)生給未定義指針賦值的運行時錯誤!
long *buffer; // 定義一個動態(tài)數(shù)組
...malloc.... // 動態(tài)分配 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 );
}
應(yīng)該這樣
void CreateArray(int n, int** a)
{
*a = (int *) malloc (sizeof(int) *n);
}
第一個問題
malloc()函數(shù)是申請堆內(nèi)存的函數(shù),括號內(nèi)參數(shù)是內(nèi)存大小,單位是字節(jié)數(shù)。函數(shù)返回的是void類型的指針,所以在賦值給int類型的指針pArr時要進行強制轉(zhuǎn)換。因為malloc本來返回的就是指針,指向內(nèi)存空間的首地址,用不著再前面加。
第二個問題
i和for括號里的i是相同的,這是個for循環(huán),循環(huán)len次,然后需要你自己輸入len個值,存儲在pArr[i]中。每次循環(huán)i都自加1,是不相同的。
for循環(huán)括號內(nèi)第一句 i=0 是將整數(shù) i 賦值為0;
然后第二句是判斷語句,判斷 ilen 是否為真,如果為真,就執(zhí)行下面的scanf語句,輸入值。輸入完成后執(zhí)行第三句 i = i+1,然后執(zhí)行第二局進入下一輪判斷 。若是 ilen 為假,則跳出for循環(huán),執(zhí)行下面的printf語句
關(guān)于在 C 語言中創(chuàng)建動態(tài)數(shù)組的問題,可以使用 C 語言提供的庫函數(shù):malloc( ) 來創(chuàng)建動態(tài)數(shù)組。即可以使用如下代碼進行實現(xiàn):
#include stdlib.h /* 動態(tài)分配內(nèi)存的庫函數(shù) malloc( )、以及后面用到的 free( ) 釋放內(nèi)存庫函數(shù)在此頭文件中有函數(shù)原型定義,故必須包含該頭文件 */
#include stdio.h
void main( )
{
int num, * p ;
printf("Please input a number :\n" ) ;
scanf("%d", num) ;
p = (int *)malloc(num) * sizeof(int) ; /* 根據(jù)前面從鍵盤上輸入的數(shù)字 num,動態(tài)分配一個整型動態(tài)數(shù)組 p */
......
......
free( p ) ; /* 應(yīng)用程序結(jié)束前務(wù)必釋放內(nèi)存 */
}
至于說中間的程序結(jié)構(gòu)的架構(gòu),就需要靠自己上機編寫、并親自調(diào)試程序了。因為任何一個程序的最終正確運行結(jié)果(可以說是100%的程序),都是必須在編程環(huán)境下面調(diào)試出來的,而不是在紙上寫出來就能夠保證通過的。
在紙上寫出來的部分源代碼,只能夠是給你提供一個大致的編程思路供參考。
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]);
}
擴展資料
動態(tài)數(shù)組,是相對于靜態(tài)數(shù)組而言。靜態(tài)數(shù)組的長度是預(yù)先定義好的,在整個程序中,一旦給定大小后就無法改變。而動態(tài)數(shù)組則不然,它可以隨程序需要而重新指定大小。
動態(tài)數(shù)組的內(nèi)存空間是從堆(heap)上分配(即動態(tài)分配)的。是通過執(zhí)行代碼而為其分配存儲空間。當(dāng)程序執(zhí)行到這些語句時,才為其分配。程序員自己負責(zé)釋放內(nèi)存。使用動態(tài)數(shù)組的優(yōu)點是可以根據(jù)用戶需要,有效利用存儲空間。