返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >深入浅出理解C语言指针的综合应用
  • 669
分享到

深入浅出理解C语言指针的综合应用

2024-04-02 19:04:59 669人浏览 独家记忆
摘要

目录指针是什么?指针变量  使用指针变量的例子通过指针引用数组&数组名vs数组名野指针野指针成因1.指针未初始化2.指针越界访问如何避免野指针指针运算指针是什么?

指针是什么?

指针是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的地址赋给指针变量p1
    p2 = &b;         //把变量a的地址赋给指针变量p2
    printf("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.指针越界访问

如何避免野指针

  • 指针初始化
  • 小心指针越界
  • 指针指向空间释放即使置NULL
  • 避免返回局部变量的地址
  • 指针使用之前检查有效性

指针运算

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

下面来看一段代码:

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

这里c是多少呢 ?

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

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

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

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

到此这篇关于深入浅出理解C语言指针的综合应用的文章就介绍到这了,更多相关C语言 指针内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 深入浅出理解C语言指针的综合应用

本文链接: https://lsjlt.com/news/140566.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 深入浅出理解C语言指针的综合应用
    目录指针是什么?指针变量  使用指针变量的例子通过指针引用数组&数组名vs数组名野指针野指针成因1.指针未初始化2.指针越界访问如何避免野指针指针运算指针是什么? ...
    99+
    2024-04-02
  • C语言深入浅出讲解指针的使用
    目录一、利用指针倒序字符串二、题目实例三、总结一、利用指针倒序字符串 void _reversal(char* left, char* right) { while (lef...
    99+
    2024-04-02
  • C语言由浅入深理解指针
    目录1. 相关概念2. 指针的定义方法3. 指针的分类4. 指针和变量的关系5. 指针与数组的关系6. 指针的运算1. 相关概念 操作系统给每个存储单元分配了一个编号,从ox00 0...
    99+
    2024-04-02
  • C语言 指针综合解析
    目录指针总结1.指针的本质1.1 指针的定义1.2 取地址操作符与取值操作符2.指针的使用场景2.1 指针的传递2.2 指针的偏移(指针的加减)2.3 指针与自增、自减运算符2.4 ...
    99+
    2024-04-02
  • C语言深入浅出分析函数指针
    我们先看一个代码: #include<stdio.h> void test() { printf("haha\n"); } int main() { printf("...
    99+
    2024-04-02
  • 深入理解C语言的指针
    目录起源进程内存布局栈设置分配方式特点堆分配方式特点堆与栈区别扩展总结起源 之前在知乎上看了一句话,指针是C的精髓,也是初学者的一个坎。换句话说,内存管理是C的精髓,C/C++可以直...
    99+
    2024-04-02
  • C语言指针综合应用的示例分析
    这篇文章将为大家详细讲解有关C语言指针综合应用的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针是什么?指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简...
    99+
    2023-06-29
  • 怎样深入理解C语言的指针
    本篇文章给大家分享的是有关怎样深入理解C语言的指针,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。起源之前在知乎上看了一句话,指针是C的精髓,也是初学者的一个坎。换句话说,内存管...
    99+
    2023-06-26
  • 深入了解C语言指针
    目录指针是什么?指针和指针类型指针运算总结指针是什么? 总结:指针就是个变量,变量里面是地址,指针就是地址。(存放在指针的值都被当成地址处理)。 注:指针的大小在32位平台是4个字节...
    99+
    2024-04-02
  • C++深入浅出讲解隐藏this指针的用法
    目录1.this指针的引出2.this指针的特性3.练习一下本篇文章我们将一起讨论在有趣的知识点--隐藏的this指针。本篇我们要使用到之前我们所学习到的C++类与对象,如果有各位小...
    99+
    2024-04-02
  • C语言深入分析数组指针和指针数组的应用
    目录一、数组类型二、定义数据类型三、数组指针四、指针数组五、小结一、数组类型 C语言中的数组有自己特定的类型数组的类型由元素类型和数组大小共同决定 例:int array[5] 的类...
    99+
    2024-04-02
  • 深入理解c++指针的指针和指针的引用
    在C++中,指针是一种数据类型,可以存储变量的内存地址。指针的指针和指针的引用是两种特殊的指针类型。指针的指针是指一个指针变量的值是另一个指针的地址。也就是说,指针的指针存储的是一个指针变量的地址。可以通过多次间接引用来获取最终指向的变...
    99+
    2023-08-09
    c++
  • 深入了解C语言中的const和指针
    目录前言指针的赋值问题ANSI C 有关简单赋值的标准问题解决const修饰const修饰变量const修饰指针前言 文章内容由阅读《C专家编程》整理而来。希望可以帮助大家解决在指针...
    99+
    2024-04-02
  • C/C++中指针的深入理解
    目录计算机的内存模型指针与指针常量指针变量和指针常量指针变量和数组函数指针C++中的引用传值还是传引用C++中的new关键词总结计算机的内存模型 CPU是计算机的核心部件,要想让一...
    99+
    2024-04-02
  • 深入浅出理解C语言初识结构体
    目录1.定义和使用结构体变量结构体的基础知识自己建立结构体类型struct 结构体名类型名 成员名:声明结构体的形式结构体的初始化  2. 结构体成员的访问3.结构体传参1...
    99+
    2024-04-02
  • 深入浅析C/C++语言结构体指针的使用注意事项
    主要内容 结构体的使用 - 定义,赋值,结构体指针 结构体作为函数参数的使用 指针的使用 代码内容重点 1.结构体的使用 - 定义,赋值,结构体指针 2....
    99+
    2024-04-02
  • C语言浅析指针的使用
    目录指针等价形式转换函数指针主函数指针 指针是一个变量 (1) 作用:只能存储地址的值 (2) 大小:32位操作系统中占4字节;64位操作系统中占8字节 (3) 取地址:& ...
    99+
    2024-04-02
  • C语言深入浅出解析二叉树
    目录树概念及结构相关概念树的表示树在实际中的运用(表示文件系统的目录树结构)二叉树概念及结构概念需要注意的特殊二叉树二叉树的性质二叉树的存储结构顺序存储链式存储总结树概念及结构 树是...
    99+
    2024-04-02
  • C语言由浅入深了解变量的应用
    目录1. 变量的存储类别内存虚拟内存分区(运行程序时进行分区) 2. 全局变量普通的全局变量静态全局变量3. 局部变量普通局部变量静态局部变量4. const不可赋值变量5...
    99+
    2024-04-02
  • C语言深入讲解指针与结构体的使用
    目录1 啥是指针1.1指针与指针变量1.2总结2 指针和指针类型2.1指针+-整数3 野指针3.1 野指针的成因1指针未初始化2指针越界访问3指针指向的空间释放3.2 如何避免野指针...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作