C语言——指针

article/2025/10/21 17:54:47

      

        目录

        指针是什么?

        指针变量

 ​

        使用指针变量的例子

 通过指针引用数组

&数组名vs数组名

野指针

野指针成因

 如何避免野指针

指针运算

        

指针是什么?

指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说

指针是C语言的灵魂(doge)

由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008"指向"该房间.因此,将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元!

指针变量

 

使用指针变量的例子

例  通过指针变量访问整型变量

int main() {int a = 100, b = 10;//定义整型变量a,b并初始化int* p1, * p2;     //定义指向整型数据的指针变量p1,p2;p1 = &a;          //把变量a的地址赋给指针变量p1p2 = &b;         //把变量b的地址赋给指针变量p2printf("a=%d,b=%d\n", a, b);//输出变量a和b的值printf("*p1=%d,*p2=%d\n", *p1, *p2);}

运行结果:

 

 在开头处定义了两个指针变量p1和p2。但此时他们并未指向任何一个变量,只是提供两个指针变量,规定他们可以指向整型变量,至于指向哪一个整型变量,要在程序中指定.。程序第五第六行的作用就是使p1指向a,使p2指向b,此时p1的值为&a(即a的地址),p2的值为&b(即为b的地址)

*注意:定义指针变量时,左侧应有类型名,否则就不是定义指针变量.

例如:

 通过指针引用数组

所谓数组元素的指针就是数组元素的地址

可以用一个指针变量指向一个数组元素。例如

int arr[10]={1,3,5,7,9,11,13,15,17,19}; //定义a为包含10个整型的数组
int *p;                                //定义p为指向整型变量的指针变量
p=&a[0];                               //把a[0]元素的地址赋给指针变量p

&数组名vs数组名

int arr[10];

我们知道arr是数组名,数组名表示数组收元素的地址。

那么问题来了 &arr数组名到底是什么呢??

不如我们来段代码吧!

 由此可以得出数组名和&数组名打印的地址是一样的。

我们再来看一段代码!

 根据代码我们发现,其实&arr和arr,虽然值是一样的,但是意义应该不一样

实际上&arr表示的是数组的地址而不是数组首元素的地址。

数组的地址+1 跳过整个数组的大小,所以&arr+1相对于&arr的差值是40.

野指针

概念:野指针就是指针指向的位置是不可知的,(随机性的丶不正确的丶没有明确限制的)

 

野指针成因

1.指针未初始化

2.指针越界访问

 

 如何避免野指针

1.指针初始化

2.小心指针越界

3.指针指向空间释放即使置NULL

4.避免返回局部变量的地址

5.指针使用之前检查有效性

指针运算

小时候我们就知道1+1等于几 那我问你如果是指针加1的话 加的是那个数字吗 ?

下面来看一段代码:

这里我们可以发现p跟p+1相差1

这里c是多少呢 ?

16进制的C的10进制是12,所以q+1和q相差4 

p是整型指针相当于sizeof(int)=4

q是字符型指针相当于sizeof(char)=1;

以上就是我归纳指针的一些小结 如果能帮助友友们

希望给个一键三连 就是对我最大的支持!



http://chatgpt.dhexx.cn/article/VuUeVjET.shtml

相关文章

指向指针的指针

C指向指针的指针 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。 一个指…

双指针详解

1、定义 顾名思义,双指针即用两个不同速度或不同方向的指针对数组或对象进行访问,通过两个不同指针的碰撞从而达到特定的目的。 2、解决问题 在时间或空间条件有限的情况下使用单向遍历需要消耗大量的时间或者根本无法解决问题,这时候就需…

指针基本认识

指针 一、指针是什么?二、指针和指针类型1.指针-整数2.指针的解引用 三、野指针四、指针运算1.指针-指针2.指针关系运算 五、指针和数组六、二级指针七、指针数组 一、指针是什么? 在计算机科学中,指针(Pointer)是编程…

c++ 指针详解

文章目录 指针1、 使用指针遍历[数组](https://blog.csdn.net/m0_62870588/article/details/123787052)2、指针的概念与理解3、指针的创建与初始化4、指针的基本操作5、指针的算数操作6、[const](https://blog.csdn.net/m0_62870588/article/details/123399735)指针7、指针的[数…

深入理解C语言指针

一、指针的概念 要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。 1.1、变量和地址 先写一段简单的代码: …

c语言指针的指针

1、情况 c语言指针的指针,还是比较常用的一个功能;当然,我也相信,一些用C语言很长时间的人,也没大用过,因为用不到,这是工作需求决定的,但总体来说,还是经常用的。 理解…

十四、C指针详解(四):指针的指针

文章目录 一、指针的指针 一、指针的指针 指针用来存放变量的地址,同时,指针也有自己的地址,因此,就可以设置一个指针变量,用来存放指针的地址,也就是指针的指针,他存放的是一个地址&#xff0…

指针的指针、字符串和指针、数组指针(详)

一、指针的指针 指针的指针,即指针的地址 定义了一个指针变量,指针变量本身占4个字节,指针变量也有地址编号 例: int a0x12345678; 假设a的地址为:0x0000 2000 int *p; p&a; 则p中存放的是a的地址编号为0x0000 20…

指针的指针(简单易懂)

int a 12; int *b &a; 内存的分配如下 这时再来一个变量 c &b; 问题来了? c 是什么类型? b 是指向整型的指针 ,c 是指向整形指针的指针? 是的 c 是指向指针的指针 声明如下 int ** c; int a 12; int *b &a; int **c &b…

Nginx Rewrite规则详解

Nginx Rewrite 规则相关指令 相关指令有if,rewrite,set,return,break等,其中最关键的就是rewrite.一个简单的Nginx Rewrite规则语法如下:rewrite ^/b/(.*)\.html /play.php?video$1 break; 1.break指令 默认值:none ;使用环境&#xff1a…

nginx配置文件rewrite规则

nginx配置文件rewrite规则 文章目录 nginx配置文件rewrite规则[toc]ifRewite 规则介绍flag标志位配置rewrite规则last二次转发 if 语法:if (condition) {…} 应用场景: server段 location段 常见的condition 变量名(变量值为空串&#xf…

nginx Rewrite 规则

一:nginx Rewrite 规则 1:rewrite的概念: Nginx Rewrite功能是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现URL重写以及重定向功能。Rewrite指令只能放在server {},location {},…

Nginx高级之Rewrite规则

进阶阶段的回顾: Nginx进阶之静态Web资源服务 Nginx进阶之代理服务 Nginx进阶之负载均衡服务 Nginx进阶之缓存服务和动静分离 作用及应用场景 作用: 实现对URL的重写以及对匹配(正则表达式)的url的重定向 场景: 1. URL访问跳转, 支持开发设计 ① 页面跳转 ② 兼容…

Nginx配置请求转发location及rewrite规则

location / {# 精确匹配 / ,主机名后面不能带任何字符串[ configuration A ] }location / {# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配[ configuration B ] }location /documents/ {# 匹配任何以 …

Rewrite规则简介

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块&…

rewrite详解

rewrite模块 URI跟URL介绍 什么是uri?统一标识符,拿www.abc.com/aw/wd/举例,那么rui就是/aw/wd/这部分数据(也有可能是图片,html网页,如果是伪静态的话,那就得看配置是啥玩意了 什么是url? 统一定位符&#xff…

Nginx基础——Rewrite规则

点击上方“芋道源码”,选择“置顶公众号” 技术文章第一时间送达! 源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69 篇,预计总共 75 篇 )中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring …

F280049C Crossbar X-BAR

文章目录 X-BAR9.1 输入X-BAR9.2 ePWM、CLB和GPIO输出X-BAR9.2.1 ePWM X-BAR9.2.1.1 ePWM X-BAR架构 9.2.2 CLB X-BAR9.2.2.1 CLB X-BAR架构 9.2.3 GPIO输出X-BAR9.2.3.1 GPIO输出X-BAR架构9.2.4 X-BAR标志 总结 X-BAR 交叉开关(在本章中称为X-BAR)提供…

BCGControlBar Pro 31.2 正式版-Key

什么是 MFC 的 BCGControlBar Pro? BCGControlBar(“Business Components Gallery ControlBar”)是一个 MFC 扩展库,企鹅180846090允许您创建具有完全自定义选项(功能区、可自定义工具栏、菜单等)和一组丰富…

BCGControlBar Library for .NET 7.1.1 Crack

什么是 BCGControlBar Library for .NET? BCGControlBar Library for .NET 是 100% 托管代码工具包,用 C/CLI 编写,面向 Microsoft .NET Framework 2.0 或更高版本。该库包含许多高度可定制、完全可设计的组件,使您能够创建最复杂…