1. 程式人生 > >C語言基礎(六)

C語言基礎(六)

功能 大小 間接 常量 也不能 eof 但是 降級 一個

一、指針的定義和使用:

  1.指針     是一種數據類型 指針變量也是一種變量   2.指針格式     對應的數據類型 * p:指針類型變量 用來指向一個變量的地址   3.通過指針修改變量的值*p = 200;   4.指針類型在內存中的大小       在32位操作系統中所有指針大小都是4個字節大小   打印指針內存大小格式: sizeof(int *) || sizeof(p)   *5.內存按照 unsignned int 為每個一個內存分配編號   6.使用     1)定義變量 int a =10; 數值10 存在內存 為a開辟的空間中 a的地址為0xff00     2)定義指針 int * p = &a 指針變量p 在內存中存貯的是 a的地址 0xff00,指針變量p 在內存中的大小在32位系統中都是4個字節大小,64位系統為8個字節。     3)*p = 200 通過操作指針變量p 所存儲的 a的地址 來改變a的值     4)指針p 有一個自己的內存地址 指針p地址 與 定義變量a的地址 0xff00不同 二、額外幾種指針   1.野指針     野指針是指向一個未知的內存空間,可能在讀寫的時候出現錯誤。     0-255都是系統保留的 不可以讀,不可以寫   2.空指針     沒有指向任何的地址(其指向0的地址)     空制指針就是指向內存編號為零的空間,操作該內存空間會報錯,一般情況空指針用於程序條件判斷   3.萬能指針     void * 指針可以指向任意變量的內存空間
三、const修飾指針  1.通過指針修改const修飾的常量     const int a = 10;     int *p += &a;     *p = 100;     a =100;   *可以通過1級指針修改一個常量的值  2.const修飾指針類型 int * 不能改變指針變量指向的內存地址的值 但是可以改變指針指向的地址     const int *p = &a     p=&b     *p = 100   *可以改變指針指向的地址  3.const修飾指針變量    能改變指針指向地址的值,但不能改變指針指向的地址     int * const p = &a;     *p = 100;     p=&b   *可以修改指針指向地址的值
 4.const修飾指針類型修飾指針變量   不能改變指針指向的的值 也不能改變指針指向的地址     const int * const *p = &a;     *p =100;     p = &b; 四、指針數組和運算  一)   1.數組名是數組的首地址,這是一個常量   2.指向數組的指針    格式:int arr [10] = { 0 } ;   int * p = arr;    *當操作指針的時候 間接操作了數組 arr[i] = p[i];   3.指針的降級操作 ,取當前地址的值:p[5]、*p   4.對指向數組的指針進行加減操作,可能會導致數組下標越界 。   5.相同的類型的指針相減 結果是兩個指針相差的長度 區別:數組名通過sizeof可以求出數組大小,指針只包含數組的首地址信息
  6.存儲char *類型的地址數組    char * arr[] ={"hello","world","niao","baobei"};   7.指針數組,它是數組,數組的每個元素都是指針類型。  二)多級指針:   1、如果二級指針前面加一個* 代表一級指針的值   2、二級指針前面加** 代表指針指向一級指針指向地址的值,加*降維度   3、如果n級指針在前面加n個*就是指針指向一級指針指向地址的值

課後練習

1. 有個數組,找出第二大的數,並且打印出來(使用*操作數組元素個數,不要使用[])

int a[] = {5,100,32,45,21,67,32,68,41,99,13,71};

2. 不使用庫函數,實現字符串拷貝功能

char src[100] = "hello";

char dst[100]; //把src的內容拷貝給dst

C語言基礎(六)