引入
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...