欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

指針數組怎么創建

林玟書2年前41瀏覽0評論

指針數組怎么創建?

創建:

(1)聲明一個數組,聲明時用常量表達式指定數組維數,然后可以用數組名訪問數組元素。

(2)聲明一個變長數組,聲明時用變量表達式指定數組維數,然后用數組名來訪問數組元素。

(3)聲明一個指針,調用malloc(),然后使用該指針來訪問數組元素。malloc接受一個參數:所需內存字節數。然后malloc()找到可用內存中一個大小合適的塊。內存是匿名的;也就是說,malloc()分配了內存,但沒有為它指定名字。然而,它卻可以返回那塊內存第一個字節的地址。因此,可以把那個地址賦值給一個指針變量,并使用該指針來訪問那塊內存。因為char代表一個字節,所以傳統上曾將malloc()定義為指向char的指針類型。然而,ANSI

C標準使用了一個新類型:指向void的指針。這一類型被用作“通用指針”。函數malloc()可用來返回數組指針、結構指針等等,因此一般需要把返回值的類型指派為適當的類型。如果malloc()找不到所需的空間,它將返回空指針。我們使用malloc()來創建一個數組,可以在程序運行時使用malloc()請求一個存儲塊,另外還需要一個指針來存放該塊在內存中的位置。例如,考慮以下代碼:

double * ptd;

ptd = (double

*)malloc(30*sizeof(double));

使用第二種或第三種方法可以做一些用普通的數組聲明做不到的事;創建一個動態數組(dynamic

array),即一個在程序運行時才分配內存并可在程序運行時選擇大小的數組。例如,假定n是一個整數變量。在C99之前,不能這樣做:

double item[n]; /*如果n是一個變量,C99之前不允許這樣做*/

然而,即使在C99之前的編譯器中,也可以這樣做:

ptd=(double

*)malloc(n*sizeof(double));

變長數組VLA和malloc的用法有兩點區別。一個區別在于VLA是自動存儲的。自動存儲的結果之一就是VLA所用內存空間在運行完定義部分之后會自動釋放。因此不必使用free()。另一方面,使用由malloc()創建的數組不必局限在一個函數中。例如,函數可以創建一個數組并返回指針,供調用該函數的函數訪問。接著,后者可以在它結束時調用free()。free()可以使用不同于malloc()指針的指針變量;必須一致的是指針中存儲的位置。

用法:

//注意指針數組和數組指針分別是如何指向二維數組的

#include

<stdio.h>

main()

{

static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

int (*p)[4];//數組指針 p是指針,指向一維數組,每個一維數組有4個int元素*p是個數組的地址,**p就是數組元素了

int i,j;

int *q[3];//指針數組 q是數組,數組元素是指針,3個int指針

p=m; //p是指針,可以直接指向二維數組

printf("--數組指針輸出元素--\n");

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

printf("] ",*(*(p+i)+j));

}

printf("\n");

}

printf("\n");

for(i=0;i<3;i++,p++)//p可看成是行指針

{

printf("= ",**p);//每一行的第一個元素

printf("= ",*(*p+1));//每一行的第二個元素

printf("= ",*(*p+2));//每一行的第三個元素

printf("= ",*(*p+3));//每一行的第四個元素

printf("\n");

}

printf("\n");

printf("--指針數組輸出元素--\n");

for(i=0;i<3;i++)

q[i]=m[i];//q是數組,元素q[i]是指針

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

printf("= ",q[i][j]);//q[i][j]可換成*(q[i]+j)

}

printf("\n");

}

printf("\n");

q[0]=m[0];

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

printf("= ",*(q[0]+j+4*i));

}

printf("\n");

}

printf("\n");

}

java 釋放指針,指針數組怎么創建