c語言關於為指標的指標分配記憶體的問題

時間 2021-08-11 17:10:44

1樓:匿名使用者

首先:int** 是一個二級指標,它是指標的指標,如果你要申請一個二維陣列,有下面兩個方法:

int** val = (int**)malloc(sizeof(int*) * 10);

int i;

for(i = 0; i < 10)

val[i] = (int*)malloc(sizeof(int) * 10);

然後你可以這樣引用:*(*(val+m)+n) = value;

第二種:int* val = (int*)malloc(sizeof(int) * 10 * 10);

然後這樣引用:*(m*10 + n) = value;

這其實就是個一維陣列,不過你把它看成二維的處理。。

希望對你有幫助哦

2樓:匿名使用者

1、void* malloc(size_t  size)。這個函式請求分配大小為size位元組的記憶體,並返回指向該塊記憶體起始位置的指標。

2、例程:

#include

#include

void main()

{ int i,j;

int row,col;

int** matrix;

printf("input the row and col:\n");

scanf("%d%d",&row,&col);  //輸入矩陣的行和列

//動態分配記憶體

// 為動態陣列分配了二維的空間

matrix=(int **)malloc(sizeof(int *)*row);

for(i=0;i

3樓:匿名使用者

//給你一段**看看,呵呵。

int i=0,j=0,x=10,y=10;

int **array=null;

//注意,是這樣申請空間的,一次性完成

array=(int**)malloc(sizeof(int)*x*y + y*sizeof(int*));

array[0]=(int*)((char*)array + y*sizeof(int*));

for(i=1;i

for( i = 0 ; i < y; i++ )}for( i = 0 ; i < y; i++ )}free(array);//注意,是這樣釋放空間的,一次性完成

4樓:

array 是 int * * 型的嗎?我在vc6.0測試,分配記憶體是正確的,但要明白,分配的記憶體都被認為是int*型的,也就是101個int*型的空間。

*(array+j)得到這101個空間中的某個,是int*型,*(*(array+j)+n)是這101個指標中的某一個指向的記憶體空間,而這個記憶體空間沒有分配,所以程式執行時會出錯。至於在16位機器上通過,只是僥倖而已,因為16位機器沒有記憶體保護,所有的空間都能訪問,如果訪問了作業系統的空間,可能不會立即崩潰,但系統有可能出問題的。而32位機器有保護模式,訪問非法空間系統會報錯。

5樓:匿名使用者

使用sizeof,就和機器位數無關~

二級指標動態分配方式如下:

int **a;

a=(int**)malloc(m*sizeof(int*));

for(i=0;i

a[i]=(int*)malloc(n*sizeof(int));

c語言為字元指標(char*)分配動態記憶體空間(malloc),為什麼空間不發生變化 10

6樓:匿名使用者

char*是指標,你獲取指標(地址)的長度,32位機器當然是4。

c語言malloc分配出來的記憶體是不能通過sizeof獲取長度的。

c語言中,定義一個指標的時候為這個指標開闢儲存空間嗎?

7樓:海天盛筵

int*p:第一級指標,表示p點所在地址是一個100int型別的值,p被宣告為一個指向整數的指標,並且為這個指標分配了儲存空間。但在這種情況下,它是一個隨機數,我們稱之為指向一個不確定的記憶體地址。

當使用者說「direct*p=5」時,在一個不可預知的記憶體地址上寫入一個整數5。這是不允許的,並可能導致程式崩潰。

p = & a;然後,將現有變數a的地址寫入指標p,我們說指向a的指標可以通過變數p對變數a進行正常操作。

擴充套件資料:

指標:指標的表示法是地址,核心是指向關係的指標,操作符「*」的作用是根據關係訪問所指向的物件。如果版本與b有指向關係,則a為b的地址,「*a」表示通過該指向關係間接訪問b。

如果b的值是一個指標,它指向c,bc地址,間接訪問,cb「*」如果c是整數,真實的,或結構,如型別變數或陣列元素對於這些型別的資料,bc(即地址)是通用的指標,即主要指的是右邊的針,持有一級指標變數指標變數。

8樓:四舍**入

int *p :一級指標,表示p所指向的地址裡面存放的是一個int型別的值,宣告p為指向整型數的指標,這時為這個指標分配了儲存空間。但這時其中是隨機數,我們稱它為指向一個不確定的記憶體地址。

使用者說的「直接*p=5」,那麼就會在一個無法預知的記憶體地址寫入一個整型數5。這是不允許的,可能導致程式崩潰。

p=&a; 則是把已有的變數a的地址寫入指標p,我們稱使指標指向a. 可以通過p對變數a正常操作。

9樓:leap灬『躍

記憶體都是用地址編好了每一」格「的,一個地址對應一「格」,定義一個指標時,系統為指標隨機賦一個記憶體大小範圍內的地址,所以該指標肯定指向記憶體的某一「格」。如果沒對指標進行賦值便使用(如p->next之類的),一般情況下在windows中執行時會提示非法訪問記憶體,然後程式崩潰(除錯時經常出現的情況),如果其他作業系統沒有這樣保護的話,可以使得指標任意訪問記憶體,這是非常危險的,所以儘量別出現野指標。

1、因為定義的指標已指向一個地址,所以可以*p=5;

2、定義指標時並不是開闢記憶體空間,指定指標型別主要是為了在 *p 訪問指標指向內容時可以確定怎樣讀取這塊連續的記憶體(例如int與long所佔的位元組是不同的)

10樓:春風不醉人

呵呵,這個問題不會太糾結:

在定義 int *p 時,系統隨機給p一個值,其對應記憶體中一處空間,並非為空(不信可以自己試試,當你不對p賦值時列印*p,這是有輸出的);

讓p = &a; 這是為p 賦初值,讓p指向程式設計師指定的地址(之前是隨機的,非為程式設計師指定的),它原來的記憶體空間仍然存在,且這不涉及釋放不釋放的問題(只在動態申請時存在釋放的問題);

不知我說的是否清楚,o(∩_∩)o~

11樓:

int *p; 宣告p為指向整型數的指標,這時為這個指標分配了儲存空間。但這時其中是隨機數,我們稱它為指向一個不確定的記憶體地址。

如果象你說的「直接*p=5」,那麼就會在一個無法預知的記憶體地址寫入一個整型數5。這是不允許的,可能導致程式崩潰。

p=&a; 則是把已有的變數a的地址寫入指標p,我們稱使指標指向a. 可以通過p對變數a正常操作。

12樓:***x櫻

**都不指,記憶體裡是隨機值

不可以直接*p=5

13樓:無言de結局

c的話定義之後是隨機值

c語言指標陣列不需要分配記憶體,C語言 指標陣列不需要分配記憶體?

天雲一號 指標陣列是需要分配記憶體單元的。指標陣列表示一個指標型別的陣列,陣列中每個元素都是一個指標,而c語言中指標只佔4個位元組,所以指標陣列所佔的記憶體大小為4 n n為陣列的大小 舉例如下 int a 5 定義一個int型別的指標陣列,共5個元素,每個元素都是一個int型別的指標,共佔用4 5...

C語言指標動態記憶體分配,C語言中的動態記憶體分配的用法舉例

void malloc size t size 這個函式請求分配大小為size位元組的記憶體,並返回指向該塊記憶體起始位置的指標 它接受的引數型別size t是unsigned int的一個typedef,這種型別用來表示資料型別的大小 如char型別的大小為1 位元組 它返回的是一個void 型別...

關於c語言的指向指標的指標和指標

這個問題很好啊,其實如果你用printf列印p1和p的話,你會發現這兩個值是相等的,因為他們都是指標,c語言是不區分指標之間的差別的,一切指標都是指標,不管他指向什麼,但是當前面加上 號後,他們就有了區別,p1很顯然是一個char型別,而 p這是一個char 型別。printf會把p1指向地址中的值...