c语言速成系列指针上篇

那么这一篇文章带大家学习一下c语言的指针的概念、使用、以及一些注意事项。

指针的概念

指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。

大白话讲解

外卖大家都点过吧,在付款前,app都会先让我们填写收货地址对吧,这个指针呢就好比外卖员,它必须要拥有你所在的地址信息,然后才能将外卖送到你的手上。

即 int*   e = &a;// e得到了a的地址

语法格式

类型*   地址变量名      eg.int*  n;//指针的创建

可能太抽象,别急后面我会举个例子让大家了解指针的使用

在此之前我们先来讲一下指针的运算

指针运算

指针运算一共有三种,我已经给大家放在下面了

指针+-整数

eg.*(p + 1)

代码举例:

# include <stdio.h>
// 指针 +- 整数
int main ()
{
int arr[ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };
int *p = &arr[ 0 ];
int i = 0 ;
int sz = sizeof (arr)/ sizeof (arr[ 0 ]);
for (i= 0 ; i<sz; i++)
{
printf ( "%d " , *(p+i)); //p+i 这⾥就是指针 + 整数
}
return 0 ;
}

指针-指针

代码举例:

指针的关系运算

代码举例:

// 指针的关系运算
# include <stdio.h>
int main ()
{
int arr[ 10 ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };
int *p = &arr[ 0 ];
int i = 0 ;
int sz = sizeof (arr)/ sizeof (arr[ 0 ]);
while (p<arr+sz) // 指针的⼤⼩⽐较
{
printf ( "%d " , *p);
p++;
}
return 0 ;
}
这里就快点带过了,大家自行观看

关于const的介绍

首先我们先来看一段代码,相信看到这篇文章的大多是小白,所以我以文字的方式带大家将代码走一遍。

int main()
{
    int a = 666;//创建变量,并赋值
    int* p = &a;//取出a的地址,并存放在* p 中
    printf("%d ", *p);//根据p提供的地址,将数据进行打印
    return 0;
}

那么带大家走完后,就开始这一部分的内容了。

首先const是修饰指针的,至于它的作用我们一会儿再说,我们先再来看段代码

这是一段编译器已经报错了的代码, 我们可以从图片中看到如第485和第469行以及它的报错,从中我们可以发现*p的值无法修改,而484行的const在星号的左边,468行的const在类型和星号的左边。

那么我们再来看一段代码。

从图中我们可以发现,*p得到的是n的地址,但却输出的不是n的地址

那么从上面两张图中我们可以看到const所在位置不同,使得最后的结果也不同。

或许有小伙伴已经猜出const的大概作用了,那么我们还是来总结一下const的规则

const的规则

位置

以下用c表示const

c   类型*   指针名

类型 c *   指针名 

类型  *   c  指针名

作用

修饰指针

修饰规则

const如果放在*的左边 修饰的是指针指向的内容 ,保证 指针指向的内容不能通过指针来改变
但是指针变量本⾝的内容可变
const如果放在*的右边 ,修饰的是 指针变量本⾝ ,保证了 指针变量的内容不能修改 ,但是 指针指
向的内容,可以通过指针改变

总结

c左值不变,c右名不变(这里的左右以星号为准,这里的名所指的对象名不变)

这里给大家拓展了有点多了,本来是打算直接告诉大家这个口诀以及简单解释口诀,但是我突然感觉还是要让大家自己从这些代码中看到结果以及总结出适合自己的口诀(如果有能力可以不参照我的总结)

野指针的成因以及如何规避野指针

成因                                 解决方法

1.指针未初始化                                       1.初始化指针   eg. int* p = NULL

2.指针越界访问                                       2.不超出访问范围

3.指针指向的空间释放                            3.指针变量不再使⽤时,及时置NULL,指针使⽤之前检                                                                      查,有效性 指针变量不再使⽤时,及时置NULL,指针                                                                      使⽤之前检查有效性

assert函数的作用

assert函数是一个库函数

作用:声明指针不为空

头文件:C语言  ----->   #include<assert.h>

              C++     ----->    #include<cassert>


今天就先给大家讲到这里,喜欢我的小伙伴可以给我点个赞哟!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据集划分】oracle数据集划分(总结版)

【数据集划分】假如你有接近百万条oracle数据库数据&#xff08;成真版&#xff09; 写在最前面最终代码原理&#xff1a;生成随机索引并打乱顺序示例作用应用场景 遇到报错&#xff1a;ORA-01795&#xff0c;通过CTE&#xff08;Common Table Expressions&#xff09;和窗口函…

npm:Node.js包管理器的使用指南

一、引言 npm&#xff08;Node Package Manager&#xff09;是Node.js的官方包管理工具&#xff0c;它不仅仅是一个包管理器&#xff0c;更是一个完整的生态系统。npm允许开发者分享和重用代码片段&#xff0c;这些代码片段被称为“包”或“模块”。本文将详细介绍npm的使用场景…

Next.js Tailwind CSS UI组件

摘要&#xff1a; 官网 今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件&#xff01;这从头构建一个AI驱动的前端UI组件生成器&#xff0c;生成Next.js Tailwind CSS UI组件&#xff1a; 1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。 2、用Copi…

Ansible——command 模块

目录 基本用法 指定主机 指定用户 指定不同的清单文件 通过sudo执行 使用更多的模块参数 1.使用特定的模块参数&#xff0c;例如chdir&#xff1a; 2.使用creates和removes参数&#xff1a; creates参数 removes参数 并发控制 详细输出 例外处理 基本语法 常用参…

08-指针与数组的结合——数组指针与指针数组的区别

指针与数组的结合 示例 1:指针访问数组元素 通过指针访问数组元素的例子&#xff1a; #include <stdio.h>int main() {int arr[5] {1,2,3,4,5};//int *p1 &arr;int *p1 (int *)&arr; // 需要强制类型转换int *p2 arr;printf("*p1:%d\n", *(p1 …

SpringCloud 负载均衡 spring-cloud-starter-loadbalancer

简述 spring-cloud-starter-loadbalancer 是 Spring Cloud 中的一个组件&#xff0c;它提供了客户端负载均衡的功能。在 Spring Cloud 的早期版本中&#xff0c;Netflix Ribbon 被广泛用作客户端负载均衡器&#xff0c;但随着时间推移和 Netflix Ribbon 进入维护模式&#xff…

iOS Hook 崩溃

0x00 崩溃重现 被 Hook 的类&#xff0c;是这样的&#xff1a; interface ViewController : UIViewController endimplementation ViewController - (void)loadView {[super loadView];NSLog("%s", __func__); }- (void)test {NSLog("%s", __func__); }-…

Python第二语言(四、Python数据容器)

目录 一、 数据容器&#xff08;list、tuple、str、map、dict&#xff09; 1. 数据容器概念 2. 列表list&#xff08; [] &#xff09; 2.1 定义方式 2.2 嵌套列表 2.3 list通过获取下标索引获取值 2.4 下标使用概念 2.5 list列表的使用&#xff08;列表的方法&#xff…

​在 The Sandbox 元宇宙的 CU 超商中寻找Milk币!

CU&#xff08;韩国领先的便利店&#xff09;和 MiL.k&#xff08;基于区块链的忠诚度整合平台&#xff09;合作在 The Sandbox 推出了首款元宇宙游戏&#xff0c;通过独家活动在 Web2 和 Web3 之间建立联系。 在元宇宙中玩转 “Play CU X MiL.k” 体验 通过引人入胜的游戏内容…

Apple开发者证书创建完整过程

1.创建CSR文件: 打开钥匙串访问程序 选择从证书颁发机构请求 创建证书 保存CSR文件到桌面 成功如下: 开始创建证书: 选择

每天一道大厂SQL题【Day32】按消息量给广东省qq打标记

文章目录 每天一道大厂SQL题【Day32】按消息量给广东省qq打标记每日语录第32题 需求三&#xff1a;按消息量给广东省qq打标记思路分析附表 答案获取加技术群讨论文末SQL小技巧 后记 每天一道大厂SQL题【Day32】按消息量给广东省qq打标记 大家好&#xff0c;我是Maynor。相信大…

vue3引入cesium和olcs

首先引入包 pnpm i olcs; pnpm i -D vite-plugin-cesium pnpm i -S cesium在vite.config.js中配置&#xff0c;参考这位大佬的笔记 添加链接描述 import { defineConfig } from vite import vue from vitejs/plugin-vue import cesium from vite-plugin-cesium; // https://…

芝麻IP好用吗?来测试了!

作为老牌代理IP服务厂商&#xff0c;芝麻IP和青果网络代理IP都做的不错&#xff0c;市场上几乎可以是有口皆碑了&#xff0c;上次测试了青果网络的代理IP&#xff0c;效果表现得还挺不错&#xff0c;和他们自己宣传的以及客户对他们的评价大差不差。 总的来说&#xff0c;他们家…

交易中的预测和跟随

任何的交易决策&#xff0c;一定是基于某种推理关系的&#xff0c;这种推理关系是基于t时刻之前的状态&#xff0c;得到t时刻之后的结果&#xff0c;我们基于这种推理关系&#xff0c;根据当前的状态&#xff0c;形成了未来结果的某种预期&#xff0c;然后基于这种预期采取相应…

开机弹窗找不到opencl.dll怎么办,教你几种有效的修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll文件”。这个问题可能会影响到我们的正常使用&#xff0c;因此了解其原因和解决方法是非常必要的。本文将从多个方面对“找不到opencl.dll文件”这一问题进行详细分析和解…

如何修复d3dcompiler43.dll丢失问题,这三种方法可轻松解决

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“计算机缺失d3dcompiler43.dll”。这个问题可能会影响到计算机的正常运行&#xff0c;让我们无法正常使用某些软件或者游戏。那么&#xff0c;究竟什么是d3dcompiler43.dll&#xff1f;为什…

极光公布2024年第一季度财报

2024年6月6日&#xff0c;中国深圳——中国领先的客户互动和营销科技服务商极光&#xff08;Aurora Mobile&#xff0c;纳斯达克股票代码&#xff1a;JG&#xff09;&#xff08;以下称“极光”或“公司”&#xff09;公布截至2024年3月31日第一季度未经审计的财报。 2024年第…

Ubuntu22.04显卡驱动与内核版本不一致解决方案

有时候在使用 GPU 服务器时执行 nvidia-smi 会遇到以下报错&#xff1a; Failed to initialize NVML: Driver/library version mismatch NVML library version: 535.161这说明 Nvidia 显卡驱动与内核版本不一致&#xff0c;我们可以查看一下内核版本&#xff1a; cat /proc/d…

netty-学习

Netty Netty 的核心概念Netty 的主要特性Netty 的应用场景Netty 的基本使用服务器端处理器 总结 代码分析1.心跳检测代码解析类和成员变量userEventTriggered方法总结 4.参数详解ChannelHandlerContext ctxObject evt 事件来源示例&#xff1a;配置 IdleStateHandler事件处理示…

Linux上的电子邮件服务器安装教程

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法&#xff0c;大数据&#xff0c;深度学习 &#x1f492; 公众号…