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語言中指標只佔4個位元組,所以指標陣列所佔的記憶體大小為4 n n為陣列的大小 舉例如下 int a 5 定義一個int型別的指標陣列,共5個元素,每個元素都是一個int型別的指標,共佔用4 5... void malloc size t size 這個函式請求分配大小為size位元組的記憶體,並返回指向該塊記憶體起始位置的指標 它接受的引數型別size t是unsigned int的一個typedef,這種型別用來表示資料型別的大小 如char型別的大小為1 位元組 它返回的是一個void 型別... 這個問題很好啊,其實如果你用printf列印p1和p的話,你會發現這兩個值是相等的,因為他們都是指標,c語言是不區分指標之間的差別的,一切指標都是指標,不管他指向什麼,但是當前面加上 號後,他們就有了區別,p1很顯然是一個char型別,而 p這是一個char 型別。printf會把p1指向地址中的值...c語言指標陣列不需要分配記憶體,C語言 指標陣列不需要分配記憶體?
C語言指標動態記憶體分配,C語言中的動態記憶體分配的用法舉例
關於c語言的指向指標的指標和指標