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

网站建设市场价格东莞关键词排名seo

网站建设市场价格,东莞关键词排名seo,开发区医院,wordpress 流水 插件目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针 3.2数组名VS数组名 3.3数组指针的使用 4、数组参数、指针参数 4.1一维数组传参 4.2二维数组传参 4.3一级指针传参 4.4二级指针传参 4.5总结 5、函数指针 5.1思考 总结 前言 我们在之前知道指针…目录 前言 1、字符指针 2、指针数组 3、数组指针 3.1数组指针 3.2数组名VS数组名 3.3数组指针的使用 4、数组参数、指针参数 4.1一维数组传参 4.2二维数组传参 4.3一级指针传参 4.4二级指针传参 4.5总结 5、函数指针 5.1思考 总结 前言 我们在之前知道指针就是一个变量用来存放地址地址唯一标识一块内存空间指针的大小是固定的32位平台是4个字节64位是8个字节指针还是有类型的指针的类型决定了指针的 - 整数的步长指针解引用操作的时候的权限。指针还是有运算的指针加减整数指针减去指针指针的关系运算忘了的可以去之前的文章复习一下。 C语言教程——指针初阶1-CSDN博客 接着我们进行指针的深入学习。 1、字符指针 在指针的类型中我们知道有一种指针类型为字符指针char* 一般都是这样的 nt main() {char a w;char* b a;return 0; } 这里b就是一个字符指针变量。还有一种是这样的 int main() {const char* pc hello;printf(%s\n, pc);return 0; } 给定一个常量字符串hello这里创建了一个pc的指针变量相当于指向字符串首字母可以理解成字符数组这里打印字符串知道起始位置就可以直到识别到\0之后才会结束打印。 2、指针数组 指针数组是一个存放指针地址的数组。 int main() {const char* arr[4] { abc,edf,ghi,mno };//存放字符指针的数组int i 0;for (i 0; i 4; i){printf(%s\n, arr[i]);}return 0; } 这里给定了四个元素的char类型的字符指针通过字符数组来存上这些指针地址当我们用循环来访问每一个元素地址的时候就访问了这些常量字符串。 我们也可以仿照二维数组来用这个指针数组来实现一个二维数组 int main() {int arr1[4] { 1,2,3,4 };int arr2[4] { 2,3,4,5 };int arr3[4] { 6,7,8,9 };int arr4[4] { 0,0,0,0 };int* arr[4] { arr1,arr2,arr3,arr4 };int i 0;for (i 0; i 4; i){int j 0;for (j 0; j 4; j){printf(%d , arr[i][j]);//或者 *(arr[i] j );}printf(\n);}return 0; } 使用指针数组的好处是可以灵活地管理内存只需分配和释放指针所指向的对象的内存空间而不需要对整个数组进行操作。此外指针数组还可以方便地传递和操作指针提高程序的效率。 注意使用指针数组时需要注意指针的有效性即确保指针指向的对象在使用时是有效的否则可能导致程序出错。 3、数组指针 我们知道指针有字符指针指向字符的指针char*整形指针指向整形的指针int*浮点型指针指向浮点型的指针float*double*。 3.1数组指针 顾名思义数组指针就是存放数组地址的指针指向数组的指针。 但数组指针怎么来写呢 int arr[10]; int (*pa)[10] arr; 这里说明pa是一个指针因为[ ] 的优先级要高于 * 号的优先级所以要加上一个 来保证p先和* 结合这个指针指向一个有10个整形元素的数组用来接收arr数组的地址。 3.2数组名VS数组名 对于这两种数组的区分是啥 int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(%p\n, arr);printf(%p\n, arr[0]);printf(%p\n, arr);return 0; } 这里通过一个十个元素的数组来进行区分我们发现这里打印出来的地址都一样因为都是数组的首地址。这里并不能看出来什么于是我们将每一个后都加上一个1如果有不一样的效果那么加上1后的效果也不一样。 int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf(%p\n, arr);printf(%p\n, arr1);printf(%p\n, arr[0]);printf(%p\n, arr[0]1);printf(%p\n, arr);printf(%p\n, arr1);return 0; } 这里就可以看出来了十六进制中第一个和第二个出现的情况都一样都是多了四个字节也就是一个整形的大小而第三个相差了40个字节也就是差了一组的大小。他们的类型也不一样第一个和第二个是整形指针int *而第三个的类型是数组指针也就是int( * ) [10] 。 所以数组名是数组首元素的地址拿到的是第一个元素的地址而取数组名拿到的是数组的地址。数组首元素的地址和数组的地址从值的角度来看是一样的但是意义是不一样的。我们从上述代码就可以看出来。 3.3数组指针的使用 针对数组指针和数组名的了解我们可以以简单的用数组指针来访问一个二维数组 #includestdio.hvoid print(int(*p)[4], int a, int b) {int i 0;for (i 0; i a; i){int k 0;for (k 0; k b; k){printf(%d , (*(p i))[k]);//等同于p[i][j]}printf(\n);} } int main() {int arr[3][4] { {1,2,3,4},{5,6,7,8},{9,10,11,12} };print(arr, 3, 4);return 0; } 取到地址后就通过每行第几列遍历来进行访问数据打印数据最后打印出这个二维数组。 学过后可以看看下面的代码代表什么意思 int(*arr[10])[5]; 这里是arr这个数组的里面存着的是每个元素的类型是int( * ) [5]的数组指针类型。arr3里每一个元素存着的就是一个五个int类型元素的数组的地址也就是指向。 4、数组参数、指针参数 4.1一维数组传参 void test(int arr[]){} void test(int arr[10]){} void test(int *arr){} void test2(int *arr[20]){} void test2(int **arr[20]) {};int main() {int arr[10] { 0 };int* arr1[20] { 0 };test(arr);test2(arr1);return 0; } 可以通过上述代码中的方式来传入一维数组的参数其中二级指针是因为在主函数中要传入的是一级指针所以传入的参数要用二级指针来获取这个一级指针的地址。 4.2二维数组传参 二维数组在传参数的时候也是一样的道理大差不差 int main() {int arr[3][5] { 0 };test(arr); } 我们要把一个二维数组传入test这个函数中可以这么做 void test(int arr[3][5]) {} void test(int arr[][5]){} 通过传入二维数组但这里要注意二维数组行可以省略但是列不可以省略。 二维数组传参形参的部分可以写成指针吗以下有几种形式我们来进行分析 void test(int *arr) {} 这样不可以因为数组名表示首元素地址而这里是一个二维数组所以这里写成一个整形一维数组的地址肯定不行。 void test(int* arr[5]){} 这里传入的是一个数组但不是二维数组可以存指针但又不是一个指针这里传参要么是数组要么是一个指针所以这个完全不搭边。 void test(int(*arr)[5]){} 这个是传入的是一个数组指针也就是传入的是第一行五个整形元素的数组的地址而刚刚好二维数组一行是五个元素所以这个可以。 void test(int **arr){} 二级指针是用来接收一级指针的地址的这里需要传入的是第一行的地址是一个数组的地址不能用二级指针来作为参数传入。 4.3一级指针传参 void test(int *p) {} 这里传入可以直接传入一个一级指针或者整形变量的地址 int a10; int *pa; test(a); test(p); 这里也可以传入数组因为传入的是首元素的地址 int arr[10]; test(arr); 4.4二级指针传参 二级指针传参形参的部分就用二级指针来接收就可以。 void test(int **a) { }int main() {int n10;int *pn;int **ppp;test(pp);test(p);return 0; } 如果我们发现函数的参数是二级指针完全就可以传入一个二级指针的变量也可以传入一个一级指针的地址也可以传入一个指针数组的数组名。 4.5总结 传过去的是一级指针就用一级指针来接收就行传过去的是二级指针就用二级指针就行。 5、函数指针 函数指针顾名思义就是指向函数的指针。 #includestdio.h int Add(int x, int y) {return x y; } int main() {int(*pc)(int, int) Add;printf(%p, pc);return 0; } 这里写出一个加法的简单函数通过函数指针来接收这个加法函数的地址之后打印这个函数指针。函数名和函数名都是函数的地址所以取不取地址符号都可以。 函数指针的写法和数组指针非常非常的类型 函数指针 int ( *pc )( int ,  int ) 函数返回类型指针变量参数类型 数组指针 int (*pc)[ 10 ] 数组元素类型指针变量数组元素个数可以不写但要写[ ] 注意优先级括号问题 我们可不可以通过函数指针来调用函数呢 ( *pc )( 2 , 3); pc( 2 , 3); 对pc解引用也就是找到了函数之后进行传参这样就可以实现函数的调用。不加解引用也可以因为pc就相当于Add。用第一行来写是为了方便理解就是为了摆设告诉这是一个指针解引用。如果要是写这个*一定要加上括号。 5.1思考 接下来看两段代码 ( *(void(*)()) 0 ) (); 这段代码出自《C陷阱和缺陷》。将0强制类型转换成一个函数指针这个函数的参数没有返回类型为void这里就是把0地址处的函数调用了一下调用的时候后面传参因为函数没有参数所以直接加个括号无参。 该代码是一次函数的调用调用0地址处的一个函数。 接下来再看一个 void (*signal(int,void(*)(int)))(int) 该代码是一次函数的声明声明的函数名字叫signalsignal函数的参数有两个一个参数是int第二个参数是一个函数指针类型该函数指针指向的参数是int返回类型是voidsignal函数的返回类型是一个函数指针该函数指针能够指向的那个函数的参数是int返回类型是void。 可以把这个代码简化一下 typedef void(*pc)(int) pc signal(int,pc) 这里说一下typedef重命名只有对指针的时候才会把类型名放在 * 旁边像之前的 typedef unsigned int unit; 就正常写就可以。 总结 本篇文章讲了一些不同类型指针的使用和写法指针在编程中是非常实用的工具可以帮助我们更好地管理内存、构建和操作数据结构提高程序的性能和效率。熟练地使用指针可以让我们编写出更加灵活、高效和可靠的程序。下一篇继续学习。
http://www.zqtcl.cn/news/882579/

相关文章:

  • 云服务器搭建网站教程加盟教育培训机构
  • 建筑网站设置工资单人换了怎么换太原做网站找谁
  • 网站做推广需要什么条件重庆网站推广哪家服务好
  • 怎样做理财网站wordpress做产品页教程视频
  • 官网模板建站塔山双喜北京网站建设兴田德润官网多少
  • 网站优化推广外包深圳专业网站建设定制
  • 网站开发aichengkeji元凤建盏简介
  • 移动端网站怎么制作asp做的网站如何发布
  • 做的网站用户密码在哪里找凡科申请的网站和qq空间一样吗
  • 如何自己做网站发布到服务器上面wordpress没有幻灯片
  • 闽侯县建设局网站企业建设网站例文
  • 家居类企业响应式网站搭建电商系统
  • 临沂哪里做网站比较好中国建设银行企业信息门户网站
  • 低价建网站提高网站订单转化率
  • 家居网站应该怎么做网站seo推广软件
  • 旅游网站建设报告关键词优化排名价格
  • 上海网站开发caiyiduo微信建微网站
  • 做网站和做网店哪个好用cms做单页网站怎么做
  • 阿里云有主体新增网站可以免费制作网页的网站
  • 网站备案幕布拍照是什么莱芜网络推广公司服务
  • 招个网站建设维护国家高新技术企业官网
  • 建设医疗网站做企业官网哪家公司好
  • 网站建设常见问题及解决办法站长网站大全
  • 二手网站建设模块500做网站
  • 建设展示型网站公司哪家好广告制作费和广告服务费区别
  • 网站排版设计欣赏网站建设制作设计seo优化南宁
  • 长春网站建设公司十佳wordpress在哪注册
  • 手机号码定位网站开发世界知名外贸网站
  • 广西南宁网站建设排行榜建设一个视频网站己18
  • 以小说名字做网站的小说网最热门的网页游戏排行