c語言關於指標的基礎問題,C語言關於指標的基礎知識

時間 2022-04-12 19:24:40

1樓:匿名使用者

左邊傳遞的是數值,所以,形參不會對實參產生任何影響!

右邊傳遞的是指標, 而且,在swap()函式中,對指標中的資料進行了交換(變更),導致實參所對應的變數中的資料發生了變化。 形象來說,傳指標到子函式,相當於把房間位址傳到子函式中,子函式根據房間位址,對房間中的物品進行處理。 實際就是處理的實參對應的房間。

2樓:冉

關鍵字: (1)值傳遞 (2)位址傳遞第乙個相當於將a和b的值各複製乙份傳到swap()的函式內作為區域性變數作運算,

第二個則是直接那a和b的位址指標作為引數傳遞到swap()內進行運算.

因為位址唯一的,不能複製.

3樓:匿名使用者

左邊是值傳遞,實參a和b雖然進入了swap的函式,但是實參跟形參的位址並不對應,在函式返回之後,形參就釋放了,所以實參的值沒有修改。

右邊是位址傳遞,對應指向同一段記憶體空間,實參跟形參指向的位址是一致的,所以對形參的修改實質上是對實參的修改,所以值就變了。

左邊值傳遞,右邊位址傳遞,記住了,值傳遞對應實參不修改,位址傳遞實參發生了修改。

4樓:讉莣熔燃氺

首先你要知道:

每個變數在計算機中都有固定的儲存位置。

形如int a=3,a只是給&a這個位置取了另乙個名字。

左邊傳的是變數的值,右邊傳的是變數的位置。

左邊的把變數的值傳進去後,在函式中,開闢了另乙個儲存空間,而右邊因為傳的是位置,用的還是同乙個儲存空間,*a取的就是這個儲存空間的值。

c語言關於指標的基礎知識

c語言指標基礎

5樓:匿名使用者

訁是指標變數,*i表示對它指向的變數記憶體空間進行讀寫操作。

6樓:聽不清啊

int*i=500;

*i指的是i所指向單元中儲存的值。

7樓:金色潛鳥

int *i=500; 從語法來說,是錯誤的。錯在初始化方式。

int *i; 這是宣告,這裡的變數 i 宣告為 指標,用於指向 int 型變數。

若要初始化,需要用位址。例如:

int a = 1234;

int *i=&a;

&a 是變數 a的位址,初始化,讓 指標 i 指向 a的位址。

這樣 宣告後,語句中, i 是位址; 語句中, *i 是 值。 (強調是語句中。c/c++語言,形式邏輯不成立,外貌 一樣的符號表達,在宣告和在語句是不一樣的!)

輸出語句: printf("%p %d\n",i,*i); 輸出 位址 i 和值 *i

例如輸出: 0018ff44 1234

**********=

int *i=500; 500 是位址,

應寫成 int *i= (int *) 500; 這樣,語法就對了,

printf("%d\n",i); 輸出位址 500

但是,這個儲存 單元 不好用。 *i = 1234; 編譯可以通過,執行有錯。

int *i= (int *)0x0018ff44; 這個儲存 單元 也許好用。

printf("%p %d\n",i,*i); 也許可以了。

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

8樓:匿名使用者

首先: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;

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

希望對你有幫助哦

9樓:匿名使用者

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

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);//注意,是這樣釋放空間的,一次性完成

10樓:

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

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

11樓:匿名使用者

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

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

int **a;

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

for(i=0;i

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

關於c語言指標的問題?

12樓:匿名使用者

*(p+5)表示元素a[5]的值。

p是乙個指標型別, p+5是a[5]的位址,然後*取只,所以得到的是值。

由於括號的運算優先順序比*高 所以*(p+5)會先執行p+5在取值

13樓:霧漫大武漢

我教你個方法,在大學變成c語言變成中:除了在定義指標變數的時候用到*,變數表示指標以外,其餘地方用到*都一般都表示值,二維陣列另當別論。

所以這個地方就是值

14樓:

*(p+5)表示a[5]的值,p+5表示a[5]的位址。(若幫助了你,請採納)

15樓:林家

回答您好,很高興幫您解答這個問題,這邊幫您查詢到了幾個常見問題,望採納,謝謝

strlen是求字串的長度,一定只能是字串,測量字元陣列的長度時,不能用strlen;sizeof是求資料型別所佔記憶體空間的大小,以位元組為單位。

希望對您有所幫助

更多2條

16樓:匿名使用者

值。。。。。。。。。。。。。。。。

c語言指標傳遞問題,C語言指標問題

指標傳遞 引用傳遞指的就是呼叫函式時傳遞的是指標 引用。與之對應的還有傳值方式。這種方式只是傳遞了變數的乙個副本。也就是說只傳了乙個值而已,並不是這個變數,所以就無法對這個變數更改了。而傳遞指標或者引用就不一樣了。傳遞的是乙個變數位址,那麼你更改這個位址對應的內容也就是修改這個變數了。所以在陣列排序...

c語言指標問題,C語言指標的賦值問題

因為一維陣列陣列名就是第乙個元素的位址,二維陣列,是 每個元素為一維陣列 的一維陣列,所以,int a 3 5 a就是乙個有5個int元素的一維陣列 a 0 的首位址。a i 就是a i 0 的位址,a i j就是a i j 的元素位址。這個簡單,看圖 a就是a 3 5 的首位址,也是a 0 的首位...

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

a b 的意思是把b的值賦給a 不要因為 是賦值符號,就理解為把a賦值給b,其實 就是等號 結構體指標訪問成員時使用 結構體訪問成員時使用 struct stu a,b b a a.id 10 b id 12 本人對第五行的max min array 不理解,為什麼 array可以同時指向max和m...

關於指標問題,C語言指標問題

對應sql server資料庫中的游標定義如下。forward only 指定游標只能從第一行滾動到最後一行。操作速度最快,效能最好。只能讀取資料。keyset 指定當游標開啟時,游標中行的成員資格和順序已經固定。對行進行唯一標識的鍵集內建在 臨時資料庫 內乙個稱為 keyset 的表中。對基表中的...

c語言指標的問題,求高手,C語言中,關於指標傳遞的乙個問題,求高手解?

char pformat hello int ptemp int pformat pformat,得到的是pformat的變數記憶體位址,其結果型別為char 指向指標變數的指標,其實也就是乙個記憶體位址,可以用整型指標變數來儲存。int ptemp,這裡的ptemp就是整型指標變數,儲存 pfor...