最近複習考研的知識,有機會研究一下c語言的指標,今天就總結一下有時候讓我們愛的要死,有時候也恨得要死的指標,到底是什麼?書裡指標那章的序言說到了,不掌握指標就是沒有掌握c的精華,word指標看來真的有他的厲害之處啊。話不多說,開始總結。
第一篇總結解決一下什麼是指標的問題,做了乙個小demo簡要說明指標的用法。
指標是乙個值為記憶體位址的變數(或資料物件)
自己的理解:上邊的定義簡單扼要的告訴我們指標就是變數,變數又是什麼呢?變數就是一塊記憶體,就是乙個位址,說白了指標就是儲存記憶體位址的變數,有的書上也說了,指標就是位址。為什麼要有指標呢?因為c語言的一大特點就是可以直接對物理操作,厲害了我的哥,所以說指標是c語言的一大靈魂嘛。
1.首先定義了乙個整型的變數,也就是分配了乙個名叫year的記憶體空間,存放的內容是2016
2.定義了乙個整型的指標變數,將year的位址付給了變數,也就是右邊的指標指向左邊的變數,因為現在指標裡邊存放的是year的位址,&這個符號是取位址的意思,下邊會講到
型別 + "*" + 變數名 = 指標
注:
1.c語言中null被定義為常量,第一行代表
指標的初值設為空,表示指標不指向任何位址,不加有可能指向任意的位址
2.指標命名最好裡邊帶有"p"
int *ptr=null; // 等價於void *ptr
int *ptr_num;
char *ptr_name;
float *money_ptr;
double *p_price;
int num=9;int * ptr_num=#
//取指標1的位址賦給指標2
int * ptr_num2=&ptr_num;
//%p指標佔位符 % x 16進製制佔位符
printf("num變數的位址是:%p\t%x\n",ptr_num,&num);
//使用指標修改變數值
*ptr_num=9999;//找到位址所指的記憶體位址,把這個位址的值改為9999
上邊的**主要演示了一下:取變數位址和取位址對應變數的值,這兩個操作,乙個用的&,後乙個使用*
上邊**也展示了如果通過操縱指標來改變變數的值,我們在看看記憶體是怎麼體現的
綜合的小demo:
int num1=1024;int num2=2048;
int * ptr1;
int *ptr2;
ptr1=&num1;
ptr2=&num2;
//將變數1的值,賦給變數2
// num2=num1;*ptr2=*ptr1; 等價寫法,可以把後者看成變數
//直接操作指標
ptr2=ptr1; //值沒有變,位址變了
printf("重新賦值後:\n");
*ptr2=1111;
printf("重新賦值後:\n");
了解乙個概念就是反覆的去實踐,看看不同情況下的操作會得出什麼樣的結果,概念在實踐中體會的會更加的深刻
指標 C語言的靈魂
1.2指標的型別 指標的型別 去掉變數名,剩下的的就是指標型別 int p int 整形指標 int arr 3 int 3 整形陣列指標 int p int a,int b int int a,int b 返回值為整形的函式指標 int arr 4 int 4 指標陣列,指向陣列的指標 指標所指向...
帶你認識C 中的this指標
this指標的初步認識 this指標的由來 乙個學生可以有多本書一樣,而這些書都是屬於這個同學的 同理,如果有很多個同學在一起,那麼為了確定他們的書不要拿混淆了,最好的辦法我想應該就是每個同學都在自己的書上寫上名字,這樣肯定就不會拿錯了。同理,乙個物件的多個成員就可看作是這個物件所擁有的書 而在很多...
認識C語言指標(一)
說到指標,就會出現一些複雜型別,如果對這些複雜型別不太了解,在用到指標有時就會比較懵。乙個型別裡面會有很多運算子,其優先順序和運算優先順序一樣,只需要遵循乙個原則 從變數名處起,根據運算子優先順序結合,一步一步分析 先來看看簡單的型別 int p 這是乙個普通的整型變數 int p 先從p處開始,先...