一、指針
指針就是地址。
1.指針的意義
地址:數(shù)據(jù)的位置。
指針是C語言提供的一種類型。
2.指針類型表示
類型 *
類型:char int float double 指針 結(jié)構(gòu)體 數(shù)組
//char * – 代表這個地址里面存放的是char型數(shù)據(jù) — 該指針指向一個char型空間
//int * – 代表這個地址里面存放的是int型數(shù)據(jù)
問題:
通過強(qiáng)制類型轉(zhuǎn)換:(int *)0x40000000 – C語言代表1個可以存放整型數(shù)據(jù)的地址
*地址 – 代表該地址中的內(nèi)容。
int num = 10;
打印num變量的地址:%p,&num
32位CPU和系統(tǒng):地址 – 0x0000 0000 ~ 0xffff ffff – 32位
64位CPU和系統(tǒng):地址 – 64位
3.一些操作
3.1打印1個變量地址
&變量名 – 普通變量。
數(shù)組名 – 數(shù)組。
3.2通過地址查看改地址的內(nèi)容以及修改改地址的內(nèi)容
操作空間如下圖
3.3操作某個空間 – 4個字節(jié),給他賦值為100,只知道該空間的地址0x8000 0000
*((int *)0x8000 0000) = 100;
//但是操作系統(tǒng)顯示段錯誤,不允許普通用戶直接修改地址的空間,基層嵌入式可以
4.指針變量的定義
類型 *標(biāo)識符; – 沒有賦初值,稱為野指針變量。
類型 *標(biāo)識符 = NULL; (習(xí)慣)
類型 *標(biāo)識符 = &變量名;(習(xí)慣)
int num = 100;
定義1個指針變量指向該num空間?
int *pnum = #
pnum 代表的是本身變量的空間
*pnum 代表的是指向的空間
5.指針類型的大小
指針類型的大小–32位/64位
6.指針變量的使用
6.1 指針變量的初始化
例如:int num = 0; char ch = 0; char str[1024]=”\0”;
int *pnum = NULL;//NULL – 空 = 0
指針變量在不使用的情況下,一般初始化為NULL,否則我們稱該指針為野指針。
6.2一個指針變量對應(yīng)多個普通變量
//int num1=100,num2=500;
//int pnum = NULL;
//pnum指向num1 – C語言如何編寫? pnum = &num1; – 可以通過pnum 操作num1的空間。
//pnum指向num2 – C語言如何編寫? pnum = &num2; – 可以通過*pnum操作num2的空間。
6.3想通過指針對某個變量空間操作:
1.定義一個指針變量 int pnum = NULL;
2.把某個變量的地址賦值給指針變量 pnum = #
3.通過指針變量名,就可以操作某個變量空間 *pnum = 1000;
6.4一個變量,多個指針指向該變量
6.5指針類型的強(qiáng)轉(zhuǎn)
和普通變量一樣。(指針類型) 某個變量地址。
unsigned int num = 0x12345678;
7.指針的其他應(yīng)用
7.1 指針變量+1,物理地址變化
指針變量+1,物理地址+類型大小。
7.2指針與一維數(shù)組
7.2.1數(shù)組名代表該數(shù)組的首地址
打印數(shù)組的首地址
在這里插入圖片描述
7.2.2num和&num[0] – 指針類型
一樣:num – 整型*
num[0] – 整型*
7.2.3 *num – 代表
– 數(shù)組中第0個元素的空間 num[0]
7.2.4 (p+1)和p+1的區(qū)別
*(p+1) 代表:地址+1 -- num[1]
p+1 = num[0]+1 = 11 – -因為優(yōu)先級 > + 先執(zhí)行*p,再執(zhí)行+1
例1:
打印:int num[5]={10,8,6,4,2};num的內(nèi)容,通過地址打印
例2:
打印:int num[5]={10,8,6,4,2};num的內(nèi)容,通過指針變量打印
7.2.5 *p++和++*p的區(qū)別:
原因:++和的優(yōu)先級相同,從右到左執(zhí)行。
先執(zhí)行++,再執(zhí)行p,地址+1(下面例子)
先執(zhí)行*p,再++,內(nèi)容+1
7.2.6擴(kuò)展:數(shù)組名代表該數(shù)組的首地址,不能夠進(jìn)行變量++。
7.3數(shù)組名和指針名:指針名可以替換數(shù)組名
7.4指針與二維數(shù)組
指針變量與二維數(shù)組的元素之間的關(guān)系:
7.4.1二維數(shù)組的首地址表示
7.4.2上述3種首地址表示方式他們的指針類型分別是:
&num[0][0] – int * – 整型指針類型 – 第0行0列元素的地址 = int *
num – int (*)[4] – 整型數(shù)組指針類型
num[0] – int * – 整型指針類型 – 第0行的首地址 = int *
7.4.3獲取第一行首地址
獲取第1行的首地址:
&num[1][0]
也可以:num[1]
結(jié)果:num[0] num[1] num[2] – 代表了3個一維數(shù)組
7.4.4二維數(shù)組的數(shù)組名 – 數(shù)組指針類型
7.5擴(kuò)展
數(shù)組指針 – 代表是指針 – 用于二維數(shù)組中。
指針數(shù)組 – 代表是數(shù)組 – 指針類型的數(shù)組
7.6指針的指針–二級指針
獲取一個指針變量的地址?
&變量名;
定義1個指針變量,保存另外一個指針變量的地址。 — 二級指針文章來源:http://www.zghlxwxcb.cn/news/detail-416220.html
p – 本身變量空間
*p – 指向的空間
*(地址) – 對該地址進(jìn)行尋址文章來源地址http://www.zghlxwxcb.cn/news/detail-416220.html
到了這里,關(guān)于C語言基礎(chǔ)——指針的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!