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的話定義之後是隨機值 你這個問題,就是典型的不瞭解編譯過程的人容易犯的錯誤,關於指標和記憶體分配的問題,樓上已經講了很多了,這裡補充一點 你這段 裡 str hello world 這樣的定義,hello world 字串是屬於const char,編譯的時候,會編譯在const資料區,這一段的資料是受系統保護的,是不允... 文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總... 最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...C語言指標函式的問題,關於C語言指標函式的使用問題
C語言指標問題,C語言指標問題?
C語言指標問題,C語言指標問題。