对C语言指针的学习与理解
一.指針是什么?
–指針一直是C語言學習過程中的一座大山,今天趁冬至談一談對指針的理解
1.指針在計算機中,是編程語言的一個對象,利用地址,它的值直接指向存在電腦存儲器中的另一個地方的值。由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元。因此,將地址形象化稱為“指針”,即通過它找到以它為地址的內存單元。以上是官方解釋,但我覺得過于抽象。
2.通俗說,指針就像宿舍樓里每個宿舍的門牌號,宿舍就是存儲單元,住在宿舍里的學生就是存儲的數據元素,通過宿舍門牌號才能快速并精準的定位到某某數據的位置,所以指針的優點就是幫助我們提高了查找內存位置的效率
3.那么指針到底是什么
指針就是個變量,存放內存單元的地址
4.指針是用來存放地址的,地址是唯一標示一塊地址空間的,并且指針的大小在32位平臺是4個字節,在64位平臺是8個字節
二.指針的類型
1.字符指針(char*)
int main() { char ch ='w'; char *pc = &ch; *pc ='w';//指針解應用,所指向的目標就是ch return 0; }2.指針數組/數組指針(存放指針的數組)
int* arr1[10];//整形指針的數組
char* arr2[4];//一級字符指針的數組
char** arr3[5];//二級字符指針的數組
①數組指針
int (*p2)[10]
p先和 * 結合,說明 p是一個指針變量,然后指針指向的是一個大小為10個的數組,所以p是一個指針,指向一個數組,叫數組指針
因為 [ ] 的優先級要高于 * ,所以必須加上()來保證 p 先和 * 結合
②&arr與arr的區別
arr表示數組名,代表的是數組首元素地址
&arr 表示的是數組的地址
arr = &arr[0]
注意:
a.數組名在sizeof中單獨出現代表整個數組
b.數組名取地址代表整個數組
c.其他情況,數組名都代表首元素的地址
③arr+1與&arr+1的區別
arr + 1 下一個元素
&arr + 1下一個數組
數組的+1,跳過整個數組的大小
3.二級指針
int a=10; a 10 0x0018ff44
int *pa=&a pa 0x0018ff44 0x0018ff40
int **ppa=&pa ppa 0x0018ff40 0x0018ff3c
a的地址放在pa中,pa的地址存放在ppa中,pa是一級指針,而ppa是二級指針
三.指針與函數
1.指針作為函數參數
①一級指針傳參
②二級指針傳參
#include<stdio.h> void test(int **ptr) { printf("num=%d\n",**ptr); } int main() { int n=10; int *p=&n; int **p=&p; test(pp); test(&p); return 0; }總結:①:函數形參為指針變量,用指針變量作為實參
②函數形參為指針變量,用變量地址作為實參
2.指向函數的指針
變量與特定的單元相聯系,通過變量名可以得到變量的存儲地址。
一個函數包括一組指令序列,存儲某一段內存中,這段內存空間的起始地址稱為函數的入口地址,通過函數名可以得到這一地址。相反,也可以通過該地址找到這個函數,,所以函數的入口地址為函數的指針。
定義形式為:
類型標識符(* 指針變量名)();
eg:int( *p)(); float( *q)();
表示p指向一個返回整型值的函數,q指向一個返回浮點型值的函數
后續有對指針新的理解還會更新。
總結
以上是生活随笔為你收集整理的对C语言指针的学习与理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab画泡面图,MATLAB中,(
- 下一篇: React 相关资料