C語言基礎(六)
阿新 • • 發佈:2019-04-17
功能 大小 間接 常量 也不能 eof 但是 降級 一個
三、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.指針 是一種數據類型 指針變量也是一種變量 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 * 指針可以指向任意變量的內存空間
課後練習
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語言基礎(六)