C語言基礎-指針基礎

指針基礎

一、什麼指針[ps:地址=指針]

   1、什麼地址:

          內存區的每一個字節都有一個編號,這就是“地址”

   2、直接訪問和間接訪問

          分水嶺:指針

          間接訪問:即,將變量i的地址存放在另一個變量中。

二、什麼是指針變量

   存放地址的變量

定義:

          基類型 *指針變量名;

備註:

          1、基類型->指針變量所指變量的數據類型

          2、“*”表示所定義的變量是指針變量

          3、變量名是ptr,而非*ptr

例子:

          int 	*ptr;
          p_ws/pWs  

使用:不能直接給一個指針變量賦值爲整形

          1、通過&運算符賦值
             p_var= &var;
          2、通過另外一個指針變量賦值
             p_var1= p_var2;
          3、通過NULL賦值
             p_var1= NULL;代表空指針

備註:

   &:取地址(&是一元運算符,它返回操作數的內存地址)

   *:取值(*是 &的反運算符,它也是一元運算符,返回指針指向的內存位置中的值)

   優先級和結合方向:“&”和“*”兩個運算符的優先級別相同,但按自右而左方向結合

int*p_var1 = &a, *p_var2 = &b;

備註:

   p_var:代表指針變量
   *p_var:指針變量所指的變量
   p_var1= &*p_var2;     -> p_var1 = &b;
   p_var1= *&p_var2;

*p_var1++和 (*p_var)++區別

   int a = *p_var1++:
   1、取得*p_var1的指
   2、p_var1指針加1

指針的算數運算:

          指針±整數  或者  指針 -指針
          指針±整數:代表指針(+)向後偏移x位(根據指針數據類型),(-)向前偏移x位
          指針 - 指針:代表兩個指針變量的內存距離

          備註:指針 + 指針 錯誤

指針的作用:

  1. 使程序簡潔、緊湊、高效
  2. 有效地表示覆雜的數據結構
  3. 動態分配內存
  4. 得到多於一個的函數返回值

三、什麼是數組指針

數組指針:

          是指數組的起始地址,也就是第一個元素的地址。數組的指針是個常量指針。

指針數組:

          是指一個數組,裏面的元素類型都是指針

因爲:數組名是數組的首地址 == 數組名就是數組的指針所以:可以像操作指針那樣操作數組名

例子:

   int ary[] = {1,2,3,4,5,6,7,8,9,10};
   ary+ 2 -> &ary[2]
  &ary[2]-> &(*(ary + 2))

四、什麼是字符串指針

字符串指針(指向字符串的指針)C語言中沒有特定的字符串類型,
我們通常是將字符串放在一個字符數組中。

字符數組和字符串指針的區別:

字符數組存儲在全局數據區或棧區,字符串存儲在常量區。
全局數據區和棧區的字符串(也包括其他數據)有讀取和寫入的權限,
而常量區的字符串(也包括其他數據)只有讀取權限,沒有寫入權限。

例子:

#include <stdio.h>
int main()
{
 char *str = "Hello World!";	
 str = "I love	C!";  //正確	
 str[3] = 'P';  //錯誤
 return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章