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

一级指针的介绍

指针变量的定义的一般形式

类型标识符   *变量名       如 int *p;

解释:p是一个指针变量,用来存放整型变量的地址。(这里定义了一个指向整形数据的指针变量)p本身也是有一个地址的(对二级指针有帮助,这里主要说一下一级指针)

注意:1、int *p=&a,a;  这是错误的因为变量只有被定义后才能被分配内存单元,而这句代码说的是一个int形的指针指向a的地址。然而a的地址在被指向之前未被定义。2、被定义的类型指针只能指向该类型的变量的地址。

例如 :int a,*p=&a;

            float  *p1;

           p1=p;这样的幅值是错误的,需要幅值则需要强制类型转换如  p1=(float *)p;

原因,不同类型的指针变量访问的储存单元大小不一样,char和int就不一样,除此之外不同类型数据的储存格式也不一样。

定义指针用  int *p;引用指针的变量的内容用  *p;  *p表示指针指向的内容。

#include <stdio.h>int main() 
{int num = 10;  // 定义一个整型变量int *ptr;      // 声明一个指向整型的指针变量ptr = &num;    // 初始化指针,使其指向变量 num 的   //*ptr = 20; 这一操作将指针 ptr 所指向的变量 num 的值修改为 20。printf("num 的值: %d\n", num);printf("通过指针 ptr 访问 num 的值: %d\n", *ptr);//输出是10  10 printf("num 的地址: %p\n", &num);printf("指针 ptr 存储的地址: %p\n", ptr);//输出是num和ptr变量的值 return 0;
}

指针作为函数参数:把指针作为函数参数传递,能够在函数内部修改调用函数中的变量值。示例如下:

#include <stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;
}int main() 
{int x = 5, y = 10;printf("交换前: x = %d, y = %d\n", x, y);swap(&x, &y);printf("交换后: x = %d, y = %d\n", x, y);return 0;
}
//输出5,10//输出10,5

swap 函数接收两个指针作为参数,通过解引用操作交换这两个指针所指向变量的值。

指针变量引用的注意事项

  • 空指针:指针变量可以被初始化为 NULL,表示它不指向任何有效的内存地址。在使用指针之前,最好先检查它是否为 NULL,以避免空指针引用错误。
  • 野指针:野指针是指指向无效内存地址的指针。使用野指针可能会导致程序崩溃或产生未定义行为。要避免使用野指针,确保在使用指针之前对其进行正确的初始化。

http://www.xdnf.cn/news/305.html

相关文章:

  • python进阶: 深入了解调试利器 Pdb
  • 第R3周:RNN-心脏病预测
  • namesapce、cgroup
  • kubeadm极速部署Kubernetes 1.26.X 版本集群
  • AI语音助手 React 组件使用js-audio-recorder实现,将获取到的语音转成base64发送给后端,后端接口返回文本内容
  • 【学习笔记】文件上传漏洞--黑白盒审计
  • 数字友好战略视域下数字安全核心要素的理论解构与实践路径
  • 2022年世界青年科学家峰会-高端装备系统动力学与智能诊断维护学术研讨会
  • Java之this关键字
  • CTF--MD5
  • 慢速率拉伸热变形工艺试验机
  • 关于模拟噪声分析的11个误区
  • Dify快速入门之基于知识库构建聊天机器人
  • 汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作
  • 在浏览器中输入 URL 到页面加载完成都做了什么
  • 【含文档+PPT+源码】基于python爬虫的豆瓣电影、音乐、图书数据分析系统
  • nginx-基础知识(二)
  • 为什么计算「网络响应时间」或「定位响应时间」时,CACurrentMediaTime() 比 Date() 更优?
  • MCP系列之架构篇:深入理解MCP的设计架构
  • DeepSeek 操作 MySQL 数据库:使用 MCP 实现数据库查询
  • 【HDFS入门】联邦机制(Federation)与扩展性:HDFS NameNode水平扩展深度解析
  • 【AI提示词】儿童看护员
  • 实验五 内存管理实验
  • 如何在PDF.js中改造viewer.html以实现PDF的动态加载
  • STM32单片机入门学习——第41节: [12-1] Unix时间戳
  • MyBatis如何配置数据库连接并实现交互?
  • YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(7):(1)ながら 一边。。一边 (2)。。。し。。。し。。 又……又……
  • Vue3后代传祖先组件通讯方法
  • BGP基础实验