C语言指针详解:用法与实例

目录

C语言指针详解:用法与实例

引言

1. 指针基础

1.1 什么是指针?

1.2 如何声明指针?

1.3 获取变量的地址

1.4 解引用指针

2. 指针的高级用法

2.1 指针和数组

2.2 指针和函数参数

2.3 指针和动态内存分配

3. 指针的注意事项

3.1 空指针

3.2 悬空指针

3.3 指针运算


C语言指针详解:用法与实例

引言
  • 指针是C语言中一个非常强大但又容易让人困惑的概念。
  • 正确理解和使用指针可以极大地提高程序的效率和灵活性。
  • 本文将详细介绍C语言中指针的基本概念、用法以及一些实用的例子。
1. 指针基础
1.1 什么是指针?
  • 指针是一个变量,它的值是另一个变量的地址。
  • 指针变量的类型必须与它指向的变量类型一致。
1.2 如何声明指针?
int *ptr;    // ptr 是一个指向 int 类型的指针
char *p;     // p 是一个指向 char 类型的指针
float *f;    // f 是一个指向 float 类型的指针
1.3 获取变量的地址
  • 使用 & 运算符可以获取变量的地址。
int num = 10;
int *ptr = #  // ptr 存储 num 的地址
1.4 解引用指针
  • 使用 * 运算符可以解引用指针,访问指针所指向的变量的值。
int num = 10;
int *ptr = #
printf("Value of num: %d\n", *ptr);  // 输出 10
2. 指针的高级用法
2.1 指针和数组
  • 数组名本身就是一个指向数组第一个元素的指针。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;  // 或者 int *ptr = &arr[0];
for (int i = 0; i < 5; i++) {printf("%d ", *(ptr + i));  // 输出 1 2 3 4 5
}
2.2 指针和函数参数
  • 指针可以用来传递变量的地址,从而在函数中修改变量的值。
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int x = 10, y = 20;swap(&x, &y);printf("x = %d, y = %d\n", x, y);  // 输出 x = 20, y = 10return 0;
}
2.3 指针和动态内存分配
  • 使用 malloc 和 free 函数可以动态分配和释放内存。
#include <stdio.h>
#include <stdlib.h>int main() {int *ptr = (int *)malloc(sizeof(int));if (ptr == NULL) {printf("Memory allocation failed\n");return 1;}*ptr = 100;printf("Value at allocated memory: %d\n", *ptr);free(ptr);  // 释放内存return 0;
}
3. 指针的注意事项
3.1 空指针
  • 指针在使用前应该初始化,避免使用未初始化的指针。
int *ptr = NULL;
if (ptr != NULL) {printf("Pointer is not null\n");
} else {printf("Pointer is null\n");  // 输出 Pointer is null
}
3.2 悬空指针
  • 指针指向的内存被释放后,指针变成悬空指针,不应该再使用。
int *ptr = (int *)malloc(sizeof(int));
*ptr = 100;
free(ptr);
// ptr 现在是悬空指针,不应该再使用
3.3 指针运算
  • 指针可以进行加减运算,但需要注意边界条件。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr++;  // ptr 现在指向 arr[1]
printf("Value at arr[1]: %d\n", *ptr);  // 输出 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13746.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CACTER诚邀您参加2024高交会

11月14-16日 第二十六届中国国际高新技术成果交易会 于深圳国际会展中心&#xff08;宝安&#xff09; 隆重开幕 CACTER于12号馆D12展位诚邀各位莅临 关于高交会 中国国际高新技术成果交易会&#xff08;简称“高交会”&#xff09;由深圳市人民政府主办&#xff0c;是目前…

微信多账号管理,让你的管理更轻松,效率更高!

现在微信账号越来越多&#xff0c;工作生活里头的微信一多&#xff0c;管理起来就头疼。各种消息、好友请求、群发消息一大堆&#xff0c;手忙脚乱的。 这时候&#xff0c;有个给力的微信管理工具就太重要了&#xff0c;它能帮你搞定社交&#xff0c;管理起来也轻松。 先说说…

Unity图形学之Shader2.0 OutLine实例

1.轮廓&#xff1a; &#xff08;1&#xff09;直接 渲染两个物体&#xff1a;一个大 一个小&#xff0c;大的是轮廓&#xff0c;直接返回一个颜色&#xff1b;小的物体按照纹理采样返回颜色 两个Pass { } 第一个Pass 渲染大的物体边缘第二个Pass 渲染小的物品 Shader "…

基于Springboot+微信小程序的农产品销售小程序 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…

OLED 显示画面的变换操作——上下、左右翻转

OLED 画面旋转 OLED 写入函数定义 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常OLED 显示界面转换函数如下 void OLED_DisplayTurn(u8 i) {if(i0…

关于 JavaScript 对象不变性,你了解吗?

1. 基本概念 在 JavaScript 语言中&#xff0c;不变性&#xff08;Immutability&#xff09;是一个重要的概念。它指的是对象一旦创建后其状态就不能改变。在函数式编程中&#xff0c;不变性是实现纯函数的基础&#xff0c;因为它可以确保函数的输出只依赖于输入参数&#xff…

AOA-LSTM多输入时序预测|算术优化算法-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、方法原理介绍&#xff1a; 四、完整程序数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平…

【金猿案例展】上海汽检——智能网联自动驾驶交通事故原因分析服务平台

‍ 零数科技案例 本次项目案例由零数科技投递并参与“数据猿年度金猿策划活动——2024大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 智能网联汽车作为未来交通出行的重要载体&#xff0c;其自动驾驶功能的快速发展为车辆的安全…

基于51单片机的电风扇控制系统proteus仿真

地址&#xff1a;https://pan.baidu.com/s/11xIpPrV8Xl5Wymk_gxPxPA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

DAY110代码审计-PHP框架开发篇ThinkPHP版本缺陷不安全写法路由访问利用链

https://blog.csdn.net/m0_60571842/article/details/139057898 看这个原作者 知识点&#xff1a; 1、PHP框架学习-ThinkPHP-架构&调试&路由&接受2、PHP框架审计-ThinkPHP-不安全写法&版本漏洞 框架审计总结方向&#xff1a; 1、版本不安全写法怎么检测 -本…

网络安全技术在能源领域的应用

摘要 随着信息技术的飞速发展&#xff0c;能源领域逐渐实现了数字化、网络化和智能化。然而&#xff0c;这也使得能源系统面临着前所未有的网络安全威胁。本文从技术的角度出发&#xff0c;探讨了网络安全技术在能源领域的应用&#xff0c;分析了能源现状面临的网络安全威胁&a…

Ubuntu上nginx常用命令

错误截图 启用nginx systemctl start nginx 停止 systemctl stop nginx 重启 systemctl restart nginx 检查nginx配置文件是否正确 nginx -t -c /etc/nginx/nginx.conf 修改配置文件后&#xff0c;重新加载配置文件命令 nginx -s reload 查看nginx服务状态&#xff0c…

Shell编程之正则表达式与文本处理器

Shell编程之正则表达式与文本处理器 文章目录 Shell编程之正则表达式与文本处理器正则表达式正则表达式概述正则表达式的定义 基础正则表达式grep创建测试文件查找特定字符**查找行首与行位****查找任意字符和重复字符****查找连续字符范围**扩展正则表达式 扩展正则表达式文本…

机器情绪及抑郁症识别算法

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月12日11点25分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17231829233829 情感识别&#xff1a;多…

基于Java Springboot在线教育学习系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

Spring Boot编程训练系统:开发流程与技巧

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

【SSL-RL】自监督强化学习:自预测表征 (SPR)算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

Station Editor更新和版本回退

一、更新 第一步点击import 第二步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 第十步 第十一步 第十二步 第十三步 、 第十四步 第十五步 第十六步 点击完update才能继续下一步 第十七步 第十八步&#xff0c;结束出来刷新一下就可以了

如何利用亚马逊自养号测评,实现店铺稳定出单的策略

企业的发展通常会经历一系列阶段&#xff0c;从起步、立足市场&#xff0c;到迅速扩张、达到顶峰&#xff0c;再到可能的市场适应或转型期&#xff0c;亚马逊平台上的店铺发展路径亦是如此。为了确保店铺能够长期立足于市场&#xff0c;关键在于有效利用其快速成长期和成熟期&a…