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

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

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語言中關於指標的指標問題?

出釹 int x 10 p1 a x 3 x 3 3 陣列從0開始,3其實是第四個 b p1 x 3,p1 先執行p1 x 3,也就是指向x 3 因為p1定義成指標。p1 這時候先執行再加,這表示式仍然是3 c p1 x 2,p1 p x 2 x陣列的地址加2,也就是指向x 2 x 2,這時候p 同...

關於c語言指標的問題,乙個關於c語言指標的問題

二維陣列相當於乙個一維陣列裡面的元素都是一維陣列 二維陣列名也相當於乙個二級指標。一維陣列 a a 0 二維陣列 a a 0 a 0 0 通俗點寫就是a a 0 a 0 a 0 0 因為 a 0 a 0 0 所以a於 a指向同乙個位址 a 0 0 則 a a 0 0 include int main...

C語言指標,c語言指標詳解

結果肯定是a撒。你在函式point char p 呼叫後沒有返回 p的值 原因是你的函式就沒有return 語句,且 形參的值不能傳遞給實參 在point函式中改變的只是指標的值,指標指向的內容不受影響。可以這樣修改一下 void point char p 不知。樓上說的。你懂了沒。就是p 3 這句...