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;和窗口函…

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…

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 …

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;他们家…

开机弹窗找不到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年第…

[网鼎杯 2020 青龙组]singal

记录下angr初使用 这道题是很简单的逻辑 32位 我们提取opcode (你可以用convert) 我是用的IDApython\ import idc adr0x00403040 step4#距离 op[] n10#多少个数据 while(n):op.append(hex(idc.get_wide_dword(adr)))adrstepn-1 print(op)然后我又下断点,提取每个"i&q…

MySQL—多表查询—内连接

一、引言 &#xff08;1&#xff09;内连接查询语法 内连接查询的是两张表的交集部分的数据。&#xff08;也就是绿色部分展示的数据&#xff09; &#xff08;2&#xff09;内连接有两种形式&#xff1a; 1、隐式内连接 语法结构&#xff1a; 2、显示内连接 语法结构&#xf…

红酒:如何避免红酒过度氧化

红酒过度氧化是影响其品质的重要因素&#xff0c;尤其是在储存和运输过程中。过度氧化的红酒会失去原有的果香和口感&#xff0c;变得平淡无味。因此&#xff0c;避免红酒过度氧化至关重要。以下是一些进一步的措施&#xff0c;可以帮助您保护云仓酒庄雷盛红酒的品质&#xff1…

QT学习过程中遇到的问题自记

文章目录 前言问题1问题2问题3 前言 学习QT嵌入式实战开发(从串口通信到JSON通信微课视频版)的过程中遇到的几个小问题 问题1 1.将书中的示例代码导入自己的电脑&#xff0c;然后点击工程进去&#xff0c;不能运行&#xff0c;报错 no kits are enabled for this project… 我…

LangChain :构建个人AI代理从这里开始

LangChain&#xff0c;一个强大的工具&#xff0c;允许根据用户输入创建对语言模型和其他工具的复杂调用链。就像拥有一个私人助理&#xff0c;可以根据手头的任务做出决定。本文来分享一下在 LangChain 中使用 Agents 的心路历程。 LangChain中代理的概念 在 LangChain 中&a…

指针还是学不会?跟着小代老师学,进入深入理解指针(4)

指针还是学不会&#xff1f;跟着小代老师学&#xff0c;进入深入理解指针&#xff08;4&#xff09; 1回调函数2qsort使用举例2.1使用qsort函数排序整行数据2.2使用qsort排序结构体数据 3qsort函数的模拟实现 1回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数…

I2C通信外设

I2C外设介绍 主机&#xff0c;就是拥有主动控制总线的权利。从机&#xff0c;只能在从机允许的情况下&#xff0c;才能控制总线。 多主机模型可分为固定多主机和可变多主机。固定多主机就是总线上&#xff0c;有2个或2个以上固定的主机&#xff0c;上面固定为主机&#xff0c;下…

【Unity | Editor强化工具】资产快速访问工具

经常在Project窗口中翻找资产相对麻烦&#xff0c;Unity自带的Favorite功能又和Project窗口强绑定&#xff0c;且只能在双列视图下使用&#xff0c;故制作了一个可以在独立窗口中列举常用资产的小工具&#xff1a; Unity Asset Quick Access 。 CSDN弄了个Github加速计划&…