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

建设能源官方网站深圳住房与建设部网站

建设能源官方网站,深圳住房与建设部网站,黄岛网站建设多少钱,中小企业网站优化C语言指针知识总结 目录 指针的概念指针的声明与初始化指针的操作 取地址与解引用指针的算术运算指针与数组 指针的高级用法 指针数组与数组指针多级指针函数指针 指针与动态内存分配指针的常见错误与注意事项 指针的概念 指针是C语言中一种非常重要的数据类型,它…

C语言指针知识总结

目录

  1. 指针的概念
  2. 指针的声明与初始化
  3. 指针的操作
    • 取地址与解引用
    • 指针的算术运算
    • 指针与数组
  4. 指针的高级用法
    • 指针数组与数组指针
    • 多级指针
    • 函数指针
  5. 指针与动态内存分配
  6. 指针的常见错误与注意事项

指针的概念

指针是C语言中一种非常重要的数据类型,它存储的是变量的内存地址。通过指针,可以直接访问和操作内存中的数据,这使得C语言在底层编程中非常强大。

  • 指针的本质:指针是一个变量,其值为另一个变量的内存地址。
  • 指针的作用
    • 直接访问内存地址。
    • 实现动态内存分配。
    • 提高函数参数传递的效率。
    • 支持复杂的数据结构(如链表、树等)。

指针的声明与初始化

指针的声明

指针的声明需要指定指针所指向的数据类型,语法如下:

数据类型 *指针变量名;

例如:

int *p;  // 声明一个指向int类型的指针

指针的初始化

指针在使用前必须初始化,否则会指向一个未知的内存地址,可能导致程序崩溃。指针可以通过以下方式初始化:

  1. 指向一个已存在的变量:
    int a = 10;
    int *p = &a;  // p指向变量a的地址
    
  2. 初始化为NULL(空指针):
    int *p = NULL;  // p为空指针,不指向任何有效地址
    

指针的操作

取地址与解引用

  • 取地址运算符&:获取变量的内存地址。
    int a = 10;
    int *p = &a;  // p存储a的地址
    
  • 解引用运算符*:通过指针访问或修改指向的内存数据。
    int a = 10;
    int *p = &a;
    *p = 20;  // 通过p修改a的值为20
    printf("%d", a);  // 输出20
    

指针的算术运算

指针的算术运算主要包括:

  • 指针加减整数:指针会根据指向的数据类型调整地址。
    int arr[3] = {10, 20, 30};
    int *p = arr;  // p指向arr[0]
    p++;           // p现在指向arr[1]
    printf("%d", *p);  // 输出20
    
  • 指针相减:计算两个指针之间的元素个数。
    int arr[3] = {10, 20, 30};
    int *p1 = &arr[0];
    int *p2 = &arr[2];
    printf("%ld", p2 - p1);  // 输出2
    

指针与数组

数组名本质上是一个指向数组首元素的指针。

  • 通过指针访问数组元素:
    int arr[3] = {10, 20, 30};
    int *p = arr;
    for (int i = 0; i < 3; i++) {printf("%d ", *(p + i));  // 输出10 20 30
    }
    
  • 数组名与指针的区别:
    • 数组名是常量指针,不能修改其值。
    • 指针是变量,可以指向不同的地址。

指针的高级用法

指针数组与数组指针

  • 指针数组:数组中的每个元素都是指针。
    int a = 10, b = 20, c = 30;
    int *arr[3] = {&a, &b, &c};  // 指针数组
    for (int i = 0; i < 3; i++) {printf("%d ", *arr[i]);  // 输出10 20 30
    }
    
  • 数组指针:指向数组的指针。
    int arr[3] = {10, 20, 30};
    int (*p)[3] = &arr;  // p指向一个包含3个int元素的数组
    printf("%d", (*p)[1]);  // 输出20
    

多级指针

多级指针是指指向指针的指针。

  • 二级指针:
    int a = 10;
    int *p = &a;
    int **pp = &p;  // pp指向p
    printf("%d", **pp);  // 输出10
    

函数指针

函数指针是指向函数的指针,可以用于回调函数等场景。

  • 声明与使用:
    int add(int a, int b) {return a + b;
    }
    int (*func_ptr)(int, int) = add;  // 函数指针
    printf("%d", func_ptr(3, 4));  // 输出7
    

指针与动态内存分配

C语言通过指针实现动态内存分配,常用的函数有malloccallocreallocfree

  • 使用malloc分配内存:
    int *p = (int *)malloc(5 * sizeof(int));  // 分配5个int大小的内存
    if (p == NULL) {printf("内存分配失败");return 1;
    }
    free(p);  // 释放内存
    
  • 使用calloc分配并初始化内存:
    int *p = (int *)calloc(5, sizeof(int));  // 分配并初始化为0
    free(p);
    

指针的常见错误与注意事项

  1. 未初始化的指针:使用未初始化的指针会导致未定义行为。
    int *p;  // 未初始化
    *p = 10; // 错误
    
  2. 野指针:指针指向的内存已被释放。
    int *p = (int *)malloc(sizeof(int));
    free(p);
    *p = 10; // 错误
    
  3. 内存泄漏:分配的内存未释放。
    int *p = (int *)malloc(sizeof(int));
    // 忘记free(p)
    
  4. 指针类型不匹配:指针类型与指向的数据类型不匹配。
    int a = 10;
    float *p = (float *)&a;  // 不推荐
    

以上是关于C语言指针的详细知识总结,涵盖了指针的基本概念、操作、高级用法以及常见错误。希望对你有所帮助!


文章转载自:

http://YNRrMrU3.sLqzb.cn
http://GWTIKrxu.sLqzb.cn
http://GzUU2UbG.sLqzb.cn
http://SsHVnL0r.sLqzb.cn
http://JSWqoPYw.sLqzb.cn
http://0GW8j4T5.sLqzb.cn
http://fLlPFMDD.sLqzb.cn
http://UfmwROhP.sLqzb.cn
http://948Ma6wn.sLqzb.cn
http://UhAbWaeQ.sLqzb.cn
http://fgajZF7Y.sLqzb.cn
http://BGrwCXij.sLqzb.cn
http://kYt5c1KO.sLqzb.cn
http://iLmYT6NH.sLqzb.cn
http://0rYLi1mK.sLqzb.cn
http://BNeegusn.sLqzb.cn
http://3JhAIexr.sLqzb.cn
http://9QqUYODG.sLqzb.cn
http://wghfm1uh.sLqzb.cn
http://JJlbwXRo.sLqzb.cn
http://99EOP7LI.sLqzb.cn
http://2mwtZBqY.sLqzb.cn
http://9YESwoIM.sLqzb.cn
http://n3f2FEI8.sLqzb.cn
http://GWl44gUN.sLqzb.cn
http://gSg61Kc5.sLqzb.cn
http://KyhGEbMH.sLqzb.cn
http://tbzQeWQ5.sLqzb.cn
http://6ywQf0dF.sLqzb.cn
http://MrYN6Wcy.sLqzb.cn
http://www.dtcms.com/wzjs/627084.html

相关文章:

  • 网络科技公司 网站建设网站制作详细过程
  • 怎么做网站里导出没有水印的图网站建设前规划
  • 山东 网站建设 公司鞍山人才网官方网站
  • wordpress全站301wap网站优化
  • 番禺网站建设培训学校wordpress 后台拿shell
  • 页游网站建设做国外贸易的网站
  • 温州市建设工程质量监督站网站小程序模板图片
  • react node.js网站开发建设网站 关于竣工结算的期限
  • 郑州做网站优化开发公司与物业公司移交协议
  • 深圳做高端企业网站建设公司网站开发项目扶持政策有哪些
  • 东莞企业年检哪个网站做网站显示危险网站要怎么做
  • 郑州做网站公司msgg开发一个app需要多少钱 知乎
  • 做网站被攻击谁的责任济南精品建站外包公司价格
  • 沈阳做网站软件泰安住房和城乡建设局网站
  • 网站建设怎么样工作室网站建设松江公司
  • 网站内部链接导向商业网站开发实训内容
  • 定制网站设计51链
  • 帮人做设计的网站建筑工程网上申报如何补件
  • 网站成功案例设计为什么计算机鄙视软工
  • 无忧网站优化传奇电脑版哪个好玩
  • 网站做成app客户端网站建设范围
  • 烟台网站建设科技公司广西城乡和住房建设厅网站
  • 如何加快百度收录网站网站模板源码下载网
  • 做电影网站不放国内主机泰安百度做网站的
  • 建立网站用英语网站建设有几块
  • 昆明网站空间学网站设计和平面设计
  • 网站后台 黑链接网站设计师证书
  • 理县网站建设企业用什么做网站
  • 网站网络投票建设步骤网站怎么做关键词
  • 西部数码网站备案建设一个境外网站