日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对C语言指针的学习与理解

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对C语言指针的学习与理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.指針是什么?

–指針一直是C語言學習過程中的一座大山,今天趁冬至談一談對指針的理解
1.指針在計算機中,是編程語言的一個對象,利用地址,它的值直接指向存在電腦存儲器中的另一個地方的值。由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元。因此,將地址形象化稱為“指針”,即通過它找到以它為地址的內存單元。以上是官方解釋,但我覺得過于抽象。
2.通俗說,指針就像宿舍樓里每個宿舍的門牌號,宿舍就是存儲單元,住在宿舍里的學生就是存儲的數據元素,通過宿舍門牌號才能快速并精準的定位到某某數據的位置,所以指針的優點就是幫助我們提高了查找內存位置的效率
3.那么指針到底是什么
指針就是個變量,存放內存單元的地址

int main() { int a=10;//在內存中開辟一塊空間 int *p=&a;//這里我們對變量a,取出它的地址,然后將a的地址存放在p變量中 return 0}

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 print(int *p, int sz) {int i = 0;for(i=0; i<sz; i++){printf("%d\n", *(p+i));} } int main() {int arr[10] = {1,2,3,4,5,6,7,8,9};int *p = arr;int sz = sizeof(arr)/sizeof(arr[0]);//一級指針p,傳給函數print(p, sz);return 0; }

②二級指針傳參

#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指向一個返回浮點型值的函數

int( * p)();int *p();的區別> 前者定義的是p為一個指針變量(指向函數) > 后者定義p是一個函數,其返回值為指針

后續有對指針新的理解還會更新。

總結

以上是生活随笔為你收集整理的对C语言指针的学习与理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。