当前位置: 首页 > news >正文

东阳网站建设软件开发平台托管是什么意思

东阳网站建设软件开发,平台托管是什么意思,seo 网站 结构,wordpress 发送邮件失败文章目录:star:1. 字符指针:star:2. 指针数组2.1 指针数组的定义2.2 指针数组的使用:star:3. 数组指针3.1 数组的地址3.2 数组指针的使用:star:4. 数组参数和指针参数:star:5. 函数指针5.1 函数名和函数的地址5.2 练习:star:6. 函数指针数组6.1 转移表:star:7. 指向函数指针数组… 文章目录:star:1. 字符指针:star:2. 指针数组2.1 指针数组的定义2.2 指针数组的使用:star:3. 数组指针3.1 数组的地址3.2 数组指针的使用:star:4. 数组参数和指针参数:star:5. 函数指针5.1 函数名和函数的地址5.2 练习:star:6. 函数指针数组6.1 转移表:star:7. 指向函数指针数组的指针:star:8. 回调函数:star::star:总结(思维导图)回顾在指针初阶时我们已经见过指针了我们来回顾一下指针的几个知识点 1.指针是一个变量用来存放的地址地址唯一标识了一块空间 2.指针的大小是4/8个字节(32/64)平台 3.指针的类型决定了指针± 整数向后跳过多少个字节以及对指针解引用时的访问权限有多大 4.指针可以进行算术运算和关系运算’ 5.无法访问野指针 本章重点 1.字符指针 2.指针数组 3.数组指针 4.数组和指针作为参数 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 ⭐️1. 字符指针 整形指针是一个指向整形的指针变量 浮点型指针是一个指向浮点型的指针变量 字符指针是一个指向字符的指针变量字符指针的值是字符变量的地址 定义指针变量有两种方式 将单个字符变量的地址赋给字符指针将字符串常量第一个元素的地址赋给字符指针 #include stdio.h //字符指针的定义 int main() {char* p;char a a;p a;p abc; //表示将字符串常量的第一个字符的地址赋给pchar str[] abc;p str; //表示将字符数组首元素的地址赋给preturn 0; }注当字符串常量出现在表达式右侧时字符串常量的值在某些情况下是一个字符地址该地址是字符串常量首元素的地址 例如在上述代码中p abc此时字符串常量的值是’a’的地址 但是在char str[] abc;此时字符串常量不是地址而是数组的元素等价于char str[] {a, b, c, \0} 在C语言中当字符串常量作为一个地址时操作系统会在静态存储区给字符串常量分配一个地址并将字符串的值置为首元素的地址 例如p abc操作系统首先给字符串常量abc在静态存储区分配地址并且将a的地址赋给变量p不可以通过解引用p修改p指向的字符串常量 ⭐️2. 指针数组 整形数组中数组的元素是整形 字符数组中数组的元素是字符 指针数组中数组的元素是指针 2.1 指针数组的定义 在C语言和C等语言中数组元素全为指针变量的数组称为指针数组指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量 int main() {int* arr[10];return 0; } []的优先级比*高所以arr和[]结合表示arr是一个数组 arr是一个一维数组名数组元素是指向整形的指针 指针数组名是首元素的地址首元素又是指针类型的变量所以指针数组名是指针变量的地址及二级指针,需要用二级指针变量接受指针数组名 2.2 指针数组的使用 指针数组可以在以下几方面使用 字符串数组在C语言中字符串是一个以空字符(‘\0’)结尾的字符数组通过指针数组可以方便地存储和处理多个字符串。例如定义一个字符串数组char *str[3]可以存储三个字符串并通过指针变量访问它们。多维数组指针数组可以用来实现多维数组的功能例如我们可以定义一个指针数组int *p[3]每个元素指向一个整型数组就可以实现一个3行5列的二维数组。 char a[3][8]{gain,much,strong}; char *n[3]{gain,much,strong};可以看出来定义二维数组时所有的字符串是连续存放的但是定义指针数组时数组元素指向的字符串不一定是连续存放的 使用指针数组的优点是 指针数组中每个元素所指的字符串不必限制在相同的字符长度访问指针数组中的一个元素是用指针间接进行的效率比下标方式要高 int main(){int i;char* pch[6] { 妹,妹,你,坐,船,头 };for (i 0; i 6; i){printf(%s, , pch[i]);}printf(\n);for (i 5; i 0; i--){printf(%s\n, pch[i]);}return 0; }在访问元素时指针数组名可以当成二维数组名来使用 ⭐️3. 数组指针 指向整形的指针叫做整形指针 指向字符的指针叫做字符指针 指向数组的指针叫做数组指针 数组也有地址那么数组的地址就可以用数组指针来存放 int main() {int arr[10] { 1, 2, 3, 4,5 ,6 , 7, 8, 9 ,10 };//定义了一个有十个元素的数组int(*parr)[10] arr;//定义了一个数组指针该指针指向的是有10个int型的数据return 0; }3.1 数组的地址 我们知道整形的地址是第一个字节的编号 那么数组的地址是否是第一个元素的地址呢 我们发现数组的地址和数组第一个元素的地址在值上是相等的 我们现在通过分别让它们±整数观察它们的含义是否相等 指针类型的含义决定了指针±整数向后一步跨度有多大因此数组的地址和数组首元素的地址值一样含义不同,arr1代表向后跳过一个整形的大小arr1代表向后跳过整个数组的大小 3.2 数组指针的使用 我们先来看一个打印二维数组的函数 //数组指针的使用 void PrintArr1(int arr[][5], int row, int col) {for (int i 0; i row; i){for (int j 0; j col; j){printf(%d , arr[i][j]);}printf(\n);} } 注因为二维数组可以看成数组元素是一维数组的数组因此二维数组的行下标和二维数组名结合就是一个一维数组而二维数组名又是首元素的地址即arr[0],arr[0]又是一个一维数组因此二维数组名是一个数组指针指向的数组元素的个数就是二维数组的列下标这也是为什么二维数组传参时列下标不能省略的原因 上述代码还可以写成这种形式 void PrintArr2(int(*arr)[5], int row, int col) {for (int i 0; i row; i){for (int j 0; j col; j){printf(%d , arr[i][j]);}printf(\n);} }我们再来探讨以下表达式arr[i][j]的含义 数组指针可以当作二维数组名来使用 ⭐️4. 数组参数和指针参数 这里将前面讲的内容做一个大致的总结 当形参是数组时 形参是一维数组 实参可以是一级指针 实参可以是普通变量的地址 实参可以是一维数组名 形参是二维数组 实参可以是二维数组 实参可以是数组指针 当实参是数组时 实参是一维数组 形参可以是一维数组名 形参可以是一级指针 实参是二维数组 形参可以是二维数组名 形参可以是数组指针 形参是指针 形参是一级指针 实参可以是一指针 实参可以是普通变量的地址 实参可以是一维数组ming 形参是二级指针 实参可以是二级指针变量 实参可以是一级指针变量的地址 实参可以是指针数组名 实参是指针 实参是一级指针 形参可以是一级指针 形参可以是一维数组名 实参是二级指针 形参可以是二级指针变量 形参可以是指针数组名 ⭐️5. 函数指针 先来看一段代码 程序运行到50行后会去寻找Add函数是先寻找Add函数所在的地址(每一个函数都用自己的地址)然后再执行该地址处的代码 函数也有自己的地址存放函数地址的指针叫做函数指针 int Add(int a, int b) {return a b; } int main() {int(*pf)(int, int) Add;//定义了一个函数指针指向的函数的形参是2个int返回值是int//并且将函数Add的地址赋给了pf }5.1 函数名和函数的地址 函数的值和函数的地址在大多数情况下是等价的 但是在函数调用时不可以函数名调用函数 正是因为函数的值和函数的地址是一样的这就导致对函数指针解引用n次最后的到的还是函数本身的值也就是函数的地址 函数调用可以通过函数指针来进行 5.2 练习 分析下面代码含义 1.(*(void (*)())0)();先看2-83和4说明了2-7是一个函数指针类型指向的函数的返回值是void函数的参数是void2-8将数字0强转成一个函数指针类型1-9将地址处为0的地址解引用得到一个参数为void的函数1-10调用地址处为0的函数 这段代码的含义是将地址为 0 的内存空间强制类型转换为一个返回值为 void 类型、参数列表为空的函数指针类型并对该指针进行解引用即调用该地址上存储的函数。 由于该代码中将地址 0 强制类型转换为一个函数指针并进行解引用因此该代码通常会被认为是一种非常危险的行为因为在绝大多数操作系统中地址 0 存储了操作系统保留的内存空间不允许用户程序直接访问和修改。 因此这段代码可能会导致系统崩溃或者其他严重后果。一般情况下我们不应该编写这样的代码。如果确实需要进行类似的操作也应该确保该地址指向的是一个合法的函数。 2.void (*signal(int , void(*)(int)))(int);signal是一个函数2-8说明了signal函数的参数一个是iint,另一个是指向参数为Int返回值为void的函数的指针1-19说明了signal函数的指针返回值是只一个函数指针指针指向的是参数为Int返回值为void的函数 该代码可以简化 typedef void(*f_return)(int) 代码变为f_return signal(int, f_return) 总结 解引用函数指针n次得到的是函数本身不可以函数名来调用函数 ⭐️6. 函数指针数组 函数指针数组是一个数组数组元素是指向函数的指针 //函数指针数组 int Add(int a, int b) {return a b; }int Sub(int a, int b) {return a - b; }int Div(int a, int b) {return a / b;}int Mul(int a, int b) {return a * b; }int main() {//arr_Pf是一个数组数组元素是指向参数为int,int返回值为int函数的指针int(*arr_Pf[5])(int, int) { 0, Add, Div, Div, Mul }; }结合函数指针我们可以通过函数指针数组元素来调用函数 6.1 转移表 //函数指针数组 int add(int a, int b) {return a b; }int sub(int a, int b) {return a - b; }int div(int a, int b) {return a / b;}int mul(int a, int b) {return a * b; }void menu() {printf(***************************\n);printf( 1. add 2. sub \n);printf( 3. div 4. mul \n);printf( 0. exit \n);printf(***************************\n);} int main() {//arr_pf是一个数组数组元素是指向参数为int,int返回值为int函数的指针int(*arr_pf[5])(int, int) { NULL, add, sub, div, mul };//因为0充当的是exit所以数组下标为0规定为NULLint input 1;int a, b;while (input){menu();printf(请选择你需要的操作-\n);scanf(%d, input);if (input ! 0){printf(请输入两个操作数-\n);scanf(%d%d, a, b);printf(结果是%d\n, arr_pf[input](a, b));}}return 0;}使用转移表可以简化代码量试想一下如果没有转移表当我们想实现的功能越来越多时代码将会有大量的switch case语句 ⭐️7. 指向函数指针数组的指针 指向函数指针数组的指针是一个指针指针指向的是一个数组数组元素是函数指针 //指向函数指针数组的指针 void test(const char* str) {printf(%s\n, str); }int main() {//函数指针pfunvoid(*pfun)(const char*) test;//函数指针的数组pfunArrvoid (*pfunArr[5])(const char* );pfunArr[0] test;//指向函数指针数组pfunArr的指针ppfunArrvoid(*(*pfunArr)[5])(const char*);return 0; }认识它的声明即可因为我也不知道可以用在哪些方面 面向gpt编程 ⭐️8. 回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外的一方调用的用于对该事件或条件进行响应。通过函数指针被调用的函数称为回调函数 回调函数的用法详见万能排序qsort ⭐️⭐️总结(思维导图) 最后当然是最重要的思维导图啦 写在最后 周末花一天时间肝出来的明天又要开始上课了以后一个星期能更2篇就不错了继续保持吧希望这篇流量能高一点 最后如果本章内容对你有帮助请留下您的三连感谢!!!
http://www.sczhlp.com/news/224011/

相关文章:

  • 广州网站建设公司有哪些智能建造技术就业前景
  • 帝国cms网站地图xmlwordpress slider插件下载
  • 崇州网站制作苏州哪家保洁公司好
  • 做网站销售提成怎么算宁波建设教育培训网
  • tinypng图片压缩网站家在深圳罗湖
  • phpcms 手机网站后台上海建站 seo
  • 网站开发与运营方向和企业管理方向中文网站建设工具
  • 最佳经验网站博客wordpress模板
  • 新网站为什么做的这么难自适应网站设计稿
  • 2015年做哪个网站致富建网站那个好
  • 有什么设计logo网站公司网站建设 费用入账
  • 好点的网站建设公司wordpress侧边栏怎么加php代码
  • 河南网站推广多少钱wordpress sql 导入
  • html5国外酷炫网站推广引流方法与渠道
  • 多边形网站企业介绍微网站怎么做的
  • 福州思企互联网站建设公司怎么样万网首页
  • 网站开发提案模板域名请记住222922
  • 石家庄有没有销售做被用的网站2022世界足球排行榜
  • 对网站做综合搜索引擎优化分析wordpress批量信息导入工具
  • 有什么网站帮做邀请函设计的深圳市中农网是专业农产品营销网站
  • 我的世界做披风网站wordpress添加自定义按钮
  • 郑州网站建设知名公司排名wordpress双栏极简
  • 网站开发系统论文北辰网站开发
  • 淘宝网站建设需求分析化妆品网站建设方案
  • 惠州 网站建设渭南建筑工程网
  • 专业网站建设教程wordpress php密码配置文件
  • com网站免费注册西安网站开发
  • 关于手机的网站有哪些内容浙江省住房建设厅网站首页
  • tp5网站开发模板网站建设材料
  • 云南手机网站开发head first wordpress 中文版