C語言 鐵律2 間接賦值是指標存在的最大意義

2021-09-26 19:20:17 字數 1886 閱讀 8159

引入

int a =10;

int* p =

null

;// 修改a的值

a =20

;//直接進行修改

p =&a;

//間接修改

*p =30;

//p的值是a的位址 *就像一把鑰匙 通過位址 找到一塊記憶體空間 就間接的修改了a的值

*就像一把鑰匙,通過這個位址找到一塊記憶體空間,也就可以間接修改a的值

另外,體現在函式呼叫中,指標則是更加重要的一點,也就是標題所說的:間接賦值。

void

getfilelen

(int

*p)//指標作引數,相當於傳址,可以對對應位址的值進行修改

void

getfilelen3

(int b)

//普通資料作引數,相當於傳值,實際上這個操作對於主調函式中的值不會造成任何影響

體現到二級指標中是一樣的。

零級指標求位址變成一級指標。在函式呼叫時,形參傳給實參,用實參取位址傳給形參,在被呼叫函式中使用*p改變實參,把運算結果傳出來。

間接賦值成立的條件

間接賦值的應用場景(三個條件自由組合將分別不同) 推斷

用1級指標作形參,可以間接修改0級指標(實參)的值

用n級指標作形參,可以間接修改n-1級指標(實參)的值

應用專案開發中的字串模型strstr-whiledowhile

問題描述:char* p = "11abcd111122abcd33333322abcd33333322qqq";

求字串p中abcd出現的次數。

問題想要解決並不難,通過while迴圈和strstr()函式

大部分內容都是之前經歷過的,會在注釋中說明。直接貼**:

// mystr是字串,sub指分串

intgetcount

(char

* mystr/*in*/

,char

* sub/*in*/

,int

* ncount)

//間接賦值是指標存在的最大意義

doelse

}while

(*p!=

'\0');

//表示到了字串的結尾

*ncount = tmpcount;

// 間接賦值是指標存在的最大意義

return ret;

}

其實計算機中的記憶體就像乙個個抽屜,每個抽屜都有乙個編號,用於存放資料。

為了方便使用,編譯器允許我們在寫程式的時候,對抽屜進行命名(而不是使用抽屜的編號),這就是變數名。就比如說我們在程式中定義:char c;這個時候系統會幫我們找乙個空閒的抽屜(比方說編號為981的抽屜),命名為c,用於存放乙個字元變數。以後我們在程式裡只要使用c這個變數,系統就知道是要對981這個抽屜裡的資料進行操作。

而指標是什麼呢?指標是我們申請乙個空抽屜,裡面不放資料,而放編號。比如我們申請乙個字元指標:char *ch=&c;這個時候,ch裡面放的是c這個變數的位址(也就是981),其中&是取址符,也就是取c這個變數的位址,而不是值。*ch才是ch指向的值。

指標鐵律demo01 c 簡介賦值

include stdlib.h include stdio.h include string.h 函式呼叫時,形參傳給實參,用實參取位址,傳給形參,在被呼叫函式裡面用 p,來改變實參,把運算結果傳出來。指標作為函式引數的精髓。c語言特有的想象,是c語言的精華。把實參取位址傳給形參 在函式呼叫的時候...

C語言 C語言指標鐵律之一 指標也是一種資料型別

指標也是一種變數,占有記憶體空間,用來儲存記憶體位址。char p1 0x100 這裡分配了4個位元組的記憶體。在指標宣告時,符號 表示所宣告的變數為指標。在指標使用時,符號 表示操作指標所指向記憶體空間中的值 p 相當於通過位址 p變數的值 找到一塊記憶體,然後對記憶體進行操作。p 放在等號的左邊...

c語言修煉(2)

為了實現鏈式操作,將目的位址返回 對源位址和目的位址加非0斷言 將源字串加const,表明其為輸入引數。char strcpy char strdest,const char strsrc 呵呵,好習慣要學習呀。void getmemory char p void test void getmemo...