日本打白嫩屁股视频 I 欧美影院一区二区 I 午夜亚洲视频 I 中文字幕亚洲综合电影 I 日本亚洲一区二区 I 国产成人综合视频 I 久草综合在线观看 I 黄动漫视频 I 寡妇喂奶挤奶水在线播放 I 韩国电影爱爱 I 国产日产精品一区二区三区 I 国产女人与zoxxxx另类 I 麻豆一区二区三区 I 你懂的在线观看网站 I 伦理电影一区二区 I 日本在线视频一区二区三区 I 欧美精品一区二区蜜桃 I 二区在线观看 I 夜夜春夜夜爽 I 色噜噜综合网 I 爱情岛论坛永久入口 I 天堂网av噜噜 I 人妻互换 综合 I 少妇无码av无码专区线 I 亚洲欧洲精品成人久久曰 I 蜜桃自拍偷拍 I 曰韩少妇内射免费播放 I 性视频1819p久久 I 欧美在线免费一级片 I 性一级录像片片视频免费看 I 亚洲成色在线观看 I 少妇厨房愉情理9仑片视频下载 I 4hu四虎影视入口 I 91蝌蚪91porny国语 I 成人性生活视频免费看 I 欧美国产午夜 I 男男小受在寝室被室友c I www.九色91 I 亚洲国产欧美动漫在线人成

淺談C語言中的指針

欄目:技術專題 發布時間:2025-01-02
作者:翁財喜

                                             翁財喜

 

一、指針描述

很多人都說指針是C語言的精髓,那什么是指針其實本質上來講指針就是地址,指針變量的值也就是地址的值。要搞清一個指針需要搞清指針的四方面的內容:指針的類型、指針所指向的類型、指針的值、指針本身所占據的內存區。

例如定義一個int *p,指針的類型是int*,指針所指向的類型是int,指針的值就是它所指向的內存區或者說地址指針本身占據的內存區,在32位的平臺是占據了4個字節,或者使用sizeof(指針的類型)就能知道大小。

二、指針的運算符

指針的運算需要知道兩個運算符:&是取地址運算符,*是間接運算符。

例如:int a=1;  int *p;//定義一個變量a值為1,定義一個指針變量p

p=&a; //使p指向了a所在的地址

*p=2; //操作指針變量p賦值為2,這邊其實也是相當于把a的值重新賦值為2

三、指針和數組的關系

舉例1:

int value;//定義一個變量

int a[20]={0};//定義一個大小為20的數組

int *p=a;//定義一個指針p指向數組a的首地址

value=*p;//這邊其實就是等于value=a[0]

value=*(p+3);//這邊其實就是等于value=a[3]

for(i=0;i<20;i++)

{

    (*p)++;//將指針指向的數組地址的值加1

    p++;//移動指針的地址,就是將指針指向下一個數組單元地址

}

以上代碼實現將20個數組單元的值由0變成1,正常而言數組名a代表數組本身,類型是int[20]但是如果將a看作為指針的話,他的類型是int*,是指向數組第0個單元的地址,也就是首地址注意該指針是不能進行修改的,也就是像a++這種操作是不行的。

舉例2:

char *p[2]={

    "Hello",

"BTZZ",

};//定義指針數組,里面存儲2個字符串

int (*pt)[10];//指向數組的指針,也就是行指針

p是一個三單元的數組,該數組的每個單元都是一個指針,這些指針各指向一個字符串。把指針數組名p當作一個指針的話,它指向數組的第0號單元,它的類型是char **,它指向的類型是char *。

*p也是一個指針,它的類型是char *,它所指向的類型是char,它指向的地址是字符串"Hello!"的第一個字符的地址,即'H'的地址。注意:字符串相當于是一個數組,在內存中以數組的形式儲存,只不過字符串是一個數組常量,內容不可改變,且只能是右值如果看成指針的話,他即是常量指針,也是指針常量

p+1也是一個指針,它指向數組的第1號單元,它的類型是char**,它指向的類型是char*。*(p+1)也是一個指針,它的類型是char*,它所指向的類型是char,它指向"BTZZ"的第一個字符’B’。

四、指針和結構類型的關系

舉例:

struct MyStruct

{

    int a;

    int b;

    int c;

};

struct MyStruct ss={20,30,40}; //聲明了結構對象ss,并把ss 的成員初始化為2030和40。

struct MyStruct *ptr=&ss; //聲明了一個指向結構對象ss的指針,它的類型是 MyStruct *,它指向的類型是MyStruct。

這邊會用到一個指向運算符->,指針ptr通過使用指向運算符來對結構體成員進行訪問,例如:ptr->a;ptr->b;ptr->b

五、指針和函數的關系

舉例1:

void fun(int *a, int *b)//使用*接收地址

{

int temp;

temp = *a;

*a = *b;

*b =temp;

}

void main(void)

{

int a =10, b = 20;

fun2(&a, &b); //將ab的地址作為參數傳過去

}

以上代碼實現a和b值互換,函數fun將形參保存的地址內容進行ab值互換操作,那么實參的值也會進行改變。

舉例2:

void fun(char **p) //要使用**進行接收

{

*p = "BTZZ";

 }

void main(void )

{

char *p = "hello";

fun(&p);    //傳實參地址

}

以上代碼將指針p指向了字符串BTZZ,因為傳遞的實參是一個一級指針,所以地址傳參的時候需要形參是一個二級指針,也就是使用**來進行接收。

舉例3:

int add(int x, int y)

{

return x + y;

}

int process(int (*p)(int, int), int a, int b)//回調函數,使用函數指針p指向add函數

{

int c;

c= (*p)(a, b); //調用add函數

return c;

}

void main(void)

{

int num;

num = process(add, 2 ,3); //將add函數作為參數傳遞給另一個函數

}

以上代碼實現num等于5,add函數是已經事先封裝好的函數,但是函數的2個參數沒有先知道所以這種時候可以采用回調函數。

六、其他

1、int *f(void)和int (*f)(void)的區別

*f沒加括號本質是一個函數,返回值是一個int*的類型。加括號主要為了保存函數的首地址,通過函數指針變量來替換函數名的使用。

2、空類型指針(void *)

void * 通用指針,任何類型的指針都可以給void*類型的指針變量賦值主要也是用在函數的參數和返回值的位置。

3、野指針

例如int *p;*p=10; 這種情況就屬于野指針,是有問題的因為指針變量又初始化,所以指針所指向的地址是隨機的值,解引用的時候也會造成訪問了一個不確定的值。

4、越界訪問

指針指向的空間不合理,比如一個10個元素整型的數組,指針指向了第11個單元,那么第十一個元素的值就是隨機值了。

5、動態內存分配

使用 malloc、calloc 和 realloc 等函數進行動態內存分配時,需要確保在不再需要內存時使用 free 函數釋放它,否則會導致內存泄漏。


主站蜘蛛池模板: 高清在线一区二区 | 91中文字幕在线 | 中文字幕精品久久久久人妻红杏ⅰ | 一级片视频免费观看 | 手机av不卡| 在线国精产品 | 免费国产成人午夜福利电影 | 一性一交一口添一摸视频 | 偷拍农村老熟妇xxxxx7视频 | 亚洲日本va午夜中文字幕 | 91亚瑟视频| 亚洲欧洲成人精品久久一码二码 | 最新国产久免费视频在线观看 | 亚洲在线观看免费 | 久久亚洲国产 | 东北少妇不戴套对白第一次 | 日韩国产成人无码av毛片 | 国产精品高潮呻吟av久久动漫 | 国产suv精品一区二区四区99 | 免费看日本| 日韩中文字幕亚洲 | 亚洲欧美成人综合久久久 | 夜夜操夜夜操 | 人人插人人艹 | 人妻老妇乱子伦精品无码专区 | 久久国产精品区 | 久久精品国产一区二区无码 | 张津瑜亚洲一区在线流出 | 天天摸天天爽日韩欧美大片 | 午夜伦情电午夜伦情电影 | 欧美激情免费在线观看 | 亚洲熟妇无码av在线播放 | 亚洲色成人网站www永久尤物 | 人妻熟妇乱系列 | 亚洲视频在线观看一区二区 | 私人vps一夜爽毛片免费 | 国产爆乳肉感大码在线视频 | 中文字幕一本久久综合 | 国产精品手机在线观看 | 野狼av午夜福利在线 | 久久亚洲精品国产精品777777 | 欧洲美熟女乱又伦av | 午夜人性色福利无码视频在线观看 | 日本系列 1页 亚洲系列 | 正在播放国产多p交换视频 在线a网站 | 日本被黑人强伦姧人妻完整版 | 国产成人一区二区三区app | 成人啪啪一区二区三区 | 激情福利视频 | 自拍偷拍第1页 | 亚洲成在人线在线播放无码vr | 成人国产免费视频 | 在线无码va中文字幕无码 | 伊人久久大香线蕉午夜av | 精品国产乱码久久久软件下载 | 国产高清狼人香蕉在线 | 国产欧美一区二区精品老汉影院 | 色婷婷国产精品高潮呻吟av久久 | 青青草大香焦在线综合视频 | 国产作爱视频免费播放 | 国产系列第一页 | 国产乱码精品一区二区三区av | 操操干干| 午夜福到在线a国产4 视频 | 亚洲精品一区国产 | 午夜精品久久久久久久久久久 | 一级女淫片a8888 | 中文字幕不卡高清视频在线 | 日韩系列无码一中文字暮 | 成人深夜小视频 | av手机在线免费观看 | 国产又爽又黄又舒服的视频 | 色小说综合网 | 日韩欧美一区二区三区永久免费 | 色偷偷激情日本亚洲一区二区 | 麻豆一区二区三区蜜桃免费 | 男人的天堂va在线无码 | 国产免费午夜福利在线播放11 | 国产又色又爽又黄又免费 | 中文免费高清观看 | 亚洲视频在线观看视频 | 亚洲精品中文字幕乱码 | 美日韩免费视频 | 国产精品高潮久久久久 | 久久亚洲精品无码va大香大香 | www久久只有这里有精品 | 国产精品国产三级国产av主播 | 伊人久久大香线蕉成人综合网 | 蜜乳av久久久久久久久久久 | 国产一区二区免费在线观看 | 日日擼夜夜擼 | 加勒比东京热无码一区 | 丁香婷婷综合网 | 日本三级成本人网站 | 国产亚洲成av人片在线观看导航 | 国产无精乱码一区二区三区 | 亚洲国产成人91精品 | 在线色图 | 女人夜夜春高潮爽a∨片 |