iis 添加网站 win7,先做产品网站还是app,湛江做网站设计,西安广告设计培训文章目录 一、字符指针变量二、数组指针变量2.1 概述2.2 数组指针初始化 三、二维数组传参本质四、函数指针五、typedef关键字六、函数指针数组 一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* 一般使用#xff1a; #includestdio.hint main… 文章目录 一、字符指针变量二、数组指针变量2.1 概述2.2 数组指针初始化 三、二维数组传参本质四、函数指针五、typedef关键字六、函数指针数组 一、字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* 一般使用 #includestdio.hint main() {char ch w;char* pc ch;return 0;
}进阶使用 #includestdio.h
int main() {const char* pstr hello;printf(%s, pstr);return 0;
}本质是把字符串 hello ⾸字符的地址放到了pstr中。 把⼀个常量字符串的⾸字符 h 的地址存放到指针变量 pstr 中。 经典例题 #includestdio.hint main() {char str1[] hello word.;char str2[] hello word.;const char* str3 hello word.;const char* str4 hello word.;if (str1 str2)printf(str1 and str2 are same\n);elseprintf(str1 and str2 are not same\n);if (str3 str4)printf(str3 and str4 are same\n);elseprintf(str3 and str4 are not same\n);return 0;
}运行结果 这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C会把常量字符串存储到单独的⼀个内存区域当⼏个指针指向同⼀个字符串的时候他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同str3和str4相同。 二、数组指针变量
2.1 概述
前面一篇文章我们讨论过指针数组本质上是一个数组一个存放指针的数组。
本节我们要讨论的数组指针后缀“指针”。
数组指针指向的是数组的指针存放的是数组的指针。
类比之前学的
• 整形指针变量 int * pint; 存放的是整形变量的地址能够指向整形数据的指针。 • 浮点型指针变量 float * pf; 存放浮点型变量的地址能够指向浮点型数据的指针。 一般使用 int (*p)[10];解释p先和*结合说明p是⼀个指针变量变量然后指着指向的是⼀个⼤⼩为10个整型的数组。所以p是⼀个指针指向⼀个数组叫 数组指针。
这⾥要注意[]的优先级要⾼于号的所以必须加上来保证p先和结合。
2.2 数组指针初始化
数组指针变量是⽤来存放数组地址的那怎么获得数组的地址呢就是我们之前学习的 数组名 。
int arr[10] {0};
arr;//得到的就是数组的地址如果要存放个数组的地址就得存放在数组指针变量中如下
int(*p)[10] arr;我们调试也能看到 arr 和 p 的类型是完全⼀致的。
int (*p) [10] arr;| | || | || | p指向数组的元素个数| p是数组指针变量名p指向的数组的元素类型三、二维数组传参本质
过去我们有⼀个⼆维数组的需要传参给⼀个函数的时候我们是这样写的
#includestdio.hvoid test(int arr[3][5], int r, int c) {int i 0;int j 0;for (i 0; i r; i) {for (j 0; j c; j) {printf(%d , arr[i][j]);}printf(\n);}
}int main() {int arr[3][5] { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };test(arr, 3, 5);return 0;
}⼆维数组起始可以看做是每个元素是⼀维数组的数组也就是⼆维数组的每个元素是⼀个⼀维数组。那么⼆维数组的⾸元素就是第⼀⾏是个⼀维数组。
所以根据数组名是数组⾸元素的地址这个规则⼆维数组的数组名表⽰的就是第⼀⾏的地址是⼀维数组的地址。根据上⾯的例⼦第⼀⾏的⼀维数组的类型就是 int [5] 所以第⼀⾏的地址的类型就是数组指针类型 int(*)[5] 。那就意味着⼆维数组传参本质上也是传递了地址传递的是第⼀⾏这个⼀维数组的地址那么形参也是可以写成指针形式的。 #includestdio.hvoid test(int(*p)[5], int r, int c) {int i 0;int j 0;for (i 0; i r; i) {for (j 0; j c; j) {//printf(%d , p[i][j]);printf(%d , *(*(p i) j));}printf(\n);}
}int main() {int arr[3][5] { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };test(arr, 3, 5);return 0;
}⼆维数组传参形参的部分可以写成数组也可以写成指针形式。 四、函数指针 使用 int (*pf3) (int x, int y)| | ------------ | | || | pf3指向函数的参数类型和个数的交代| 函数指针变量名pf3指向函数的返回类型int (*) (int x, int y) //pf3函数指针变量的类型#include stdio.h
int Add(int x, int y)
{return xy;
}
int main()
{int(*pf3)(int, int) Add;printf(%d\n, (*pf3)(2, 3));printf(%d\n, pf3(3, 5));return 0;
}运行结果 5
8注意函数名和函数名都是函数的地址 经典例题 练习1 ( *(void (*)())0 )();这里void( * )()是一个函数指针类型指向一个没有参数返回值为void类型的函数这个类型被放在一个括号里说明要进行强制类型转换这里把0强制类型转换成(void (*)())型此时0就成了一个地址指向一个void ()型函数然后再通过解引用找到这个函数进行传参当然这个函数没有参数所以最后一个括号是空的 练习2 void (*signal(int, void(*)(int))) (int);signal是一个函数的函数名
声明signal函数有两个参数第一个参数是int型第二个参数是函数指针类型
这里signal函数的返回值类型是void(*)(int) 五、typedef关键字 typedef 是⽤来类型重命名的可以将复杂的类型简单化。 ⽐如你觉得 unsigned int 写起来不⽅便如果能写成 uint 就⽅便多了那么我们可以使⽤
typedef unsigned int uint;
//将unsigned int 重命名为uint如果是指针类型能否重命名呢其实也是可以的⽐如将 int* 重命名为 ptr_t ,这样写 typedef int* ptr_t;但是对于数组指针和函数指针稍微有点区别 ⽐如我们有数组指针类型 int(*)[5] ,需要重命名为 parr_t 那可以这样写
typedef int(*parr_t)[5]; //新的类型名必须在*的右边函数指针类型的重命名也是⼀样的⽐如将 void(*)(int) 类型重命名为 pf_t ,就可以这样写 typedef void(*pfun_t)(int);//新的类型名必须在*的右边简化上述练习2的代码 typedef void(*pf_t)(int);//把void(*)(int)型重命名成pf_t注意pf_t的位置int main()
{pf_t signal(int, pf_t);return 0;
}六、函数指针数组 把函数指针地址存到数组里面就叫做函数指针数组 int (*parr1[3])();parr1 先和 [] 结合说明 parr1是数组数组的内容是什么呢 是 int (*)() 类型的函数指针。
文章转载自: http://www.morning.zmbzl.cn.gov.cn.zmbzl.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.hxftm.cn.gov.cn.hxftm.cn http://www.morning.gtqws.cn.gov.cn.gtqws.cn http://www.morning.tmbfz.cn.gov.cn.tmbfz.cn http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn http://www.morning.tlfzp.cn.gov.cn.tlfzp.cn http://www.morning.slysg.cn.gov.cn.slysg.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.cfqyx.cn.gov.cn.cfqyx.cn http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.dgsx.cn.gov.cn.dgsx.cn http://www.morning.njnqn.cn.gov.cn.njnqn.cn http://www.morning.yrdn.cn.gov.cn.yrdn.cn http://www.morning.snrbl.cn.gov.cn.snrbl.cn http://www.morning.kzcfr.cn.gov.cn.kzcfr.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.mwlxk.cn.gov.cn.mwlxk.cn http://www.morning.qtsks.cn.gov.cn.qtsks.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.bgpch.cn.gov.cn.bgpch.cn http://www.morning.lokext.com.gov.cn.lokext.com http://www.morning.pangucheng.cn.gov.cn.pangucheng.cn http://www.morning.skrww.cn.gov.cn.skrww.cn http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn http://www.morning.fpkdd.cn.gov.cn.fpkdd.cn http://www.morning.drpbc.cn.gov.cn.drpbc.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.tstwx.cn.gov.cn.tstwx.cn http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.zhmgcreativeeducation.cn.gov.cn.zhmgcreativeeducation.cn http://www.morning.shuanga.com.cn.gov.cn.shuanga.com.cn http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.nswcw.cn.gov.cn.nswcw.cn http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.ykqbs.cn.gov.cn.ykqbs.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.qsszq.cn.gov.cn.qsszq.cn http://www.morning.mmjyk.cn.gov.cn.mmjyk.cn http://www.morning.btqrz.cn.gov.cn.btqrz.cn http://www.morning.zymgs.cn.gov.cn.zymgs.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.swimstaracademy.cn.gov.cn.swimstaracademy.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.sggzr.cn.gov.cn.sggzr.cn http://www.morning.bbjw.cn.gov.cn.bbjw.cn http://www.morning.dndk.cn.gov.cn.dndk.cn http://www.morning.mkfr.cn.gov.cn.mkfr.cn http://www.morning.hghhy.cn.gov.cn.hghhy.cn http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn http://www.morning.nkiqixr.cn.gov.cn.nkiqixr.cn http://www.morning.kxwsn.cn.gov.cn.kxwsn.cn http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.gtcym.cn.gov.cn.gtcym.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.lhxdq.cn.gov.cn.lhxdq.cn http://www.morning.qrksj.cn.gov.cn.qrksj.cn http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn http://www.morning.ngmjn.cn.gov.cn.ngmjn.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.cwyfs.cn.gov.cn.cwyfs.cn http://www.morning.dpplr.cn.gov.cn.dpplr.cn http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.xbdrc.cn.gov.cn.xbdrc.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.abgy8.com.gov.cn.abgy8.com http://www.morning.rwlsr.cn.gov.cn.rwlsr.cn http://www.morning.jqtb.cn.gov.cn.jqtb.cn http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn