首页 > 其他分享 >C语言—指针初阶

C语言—指针初阶

时间:2022-12-16 18:01:26浏览次数:36  
标签:初阶 变量 指向 C语言 地址 数组 类型 指针

一、指针是什么?

       在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的成为“指针”。意思是通过它可以找到以它为地址的内存单元。

注意:内存中的存储单位:字节

C语言—指针初阶_数组与指针

C语言—指针初阶_指针初阶_02

总结:

1、指针就是变量,用来存放地址的变量。(存放在指针中的值被当做地址处理),而地址用来唯一标识一块地址空间。

2、指针的大小在32位平台是四个字节,64位平台是8个字节。


二、指针和指针类型

变量又不同类型,整型,浮点型等,同理,指针也有类型。

变量有多少类型,指针就有多少类型!

举例:

C语言—指针初阶_指针初阶_03

2.1、指针类型的意义

2.1.1、指针类型决定了:指针解引用的权限有多大

C语言—指针初阶_指针初阶_04

2.1.2、指针类型决定了:指针走一步,能走多远(步长)

C语言—指针初阶_数组与指针_05


三、野指针

3.1、概念:

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明显限制的)。


理解:大街上无人牵着,没人管的狗,我们戏称为:野狗,野指针同理。


3.2、野指针的成因

3.2.1、指针未初始化

p假如是一个局部指针变量,如果不初始化,默认为随机值。

C语言—指针初阶_数组与指针_06

3.2.2、指针越界访问

C语言—指针初阶_数组与指针_07

3.2.3、指针指向的空间已释放(无家可归)

C语言—指针初阶_指针初阶_08

3.3、如何规避野指针

3.3.1、指针初始化

C语言—指针初阶_野指针_09

3.3.2、小心指针越界

C语言本身不会检查数据的越界行为,需要编程者保持头脑清醒,保证没有越界。

3.3.3、指针指向空间释放,立即置为NULL

3.3.4、指针使用之前检查有效性

C语言—指针初阶_指针初阶_10

如何检查?(判断指针:为空—不用,不会空—才用)

C语言—指针初阶_数组与指针_11

四、指针运算

指针运算主要分为三类:

1、“指针+-整数”,

2、“指针-指针”,

3、“指针的关系运算”。

4.1、指针+-整数

指针+-整数的步长,为指针变量类型的字节长度

C语言—指针初阶_野指针_12

4.2、指针-指针

指针-指针的前提:两个指针指向同一块空间

指针-指针得到的是两个指针之间的元素个数

C语言—指针初阶_指针初阶_13

应用:编写求字符串长度的函数

C语言—指针初阶_数组与指针_14

4.3、指针的关系运算

1、

C语言—指针初阶_指针初阶_15

2、

C语言—指针初阶_野指针_16


虽然绝大多数编译器可以让上诉第二个代码可以顺利完成任务,然而我们还是应该避免这样写,因为标准并不保证他可行。

C语言对指针的标准规定:

       允许指向数组元素的指针与指向数组的最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一元素之前的那个内存位置的指针进行比较。


五、指针与数组

5.1、数组名是什么?

数组名是数组首元素的地址

C语言—指针初阶_数组与指针_17

5.2、指针与数组关系

可以将数组名赋值给一个指针,二者等价

int * p  = arr;   //p存放数组arr的首地址

既然可以把数组名当做地址存放在一个指针中,我们使用指针来访问一个数组就成为可能。即,指针可以指向一个数组。

C语言—指针初阶_野指针_18

C语言—指针初阶_野指针_19


六、二级指针

指针变量也是变量,是变量就有地址,那么指针变量的地址存放在哪里?——二级指针。

C语言—指针初阶_指针初阶_20

同理,我们可不可以写三级指针呢?答案是可行的,理论上我们可写无限指针(禁止套娃!)。但是不常用,三级指针及之后均不常用。


七、指针数组

指针数组是指针还是数组?

答案:是数组,是存放指针类型的数组

等同于:整型数组,字符数组

C语言—指针初阶_野指针_21

C语言—指针初阶_指针初阶_22

制作不易,喜欢就点赞收藏吧!!!持续更新中~~~

标签:初阶,变量,指向,C语言,地址,数组,类型,指针
From: https://blog.51cto.com/u_15910342/5948058

相关文章

  • STC51入门笔记(郭天祥C语言)---第二节:Keil 软件使用及流水灯设计
    作者:sumjess本章详细介绍单片机程序常用编译软件Keil的用法,包括用Kei建立工程、工程配置、C51单片机程序软件仿真、单步、全速、断点设置、变量查看等。同时还介绍如何......
  • C语言《数据结构》课程设计任务书
    C语言《数据结构》课程设计任务书1.个人薪资管理系统[基本功能]1)个人工号及薪资使用线性表实现数据存储;2)可实现个人薪资信息的输入、修改、删除功能;3)能够对数据按......
  • 二进制中1的个数--C语言
    分析:方法一以循环的方式进行以下操作,直到n缩减变为0。(1)用该数据模2,检测其是否能够被2整除。(2)若可以,则该数据对应二进制比特位的最低位一定是0,否则是1。如果是1,给计数加1......
  • C语言复习 --指针
    指针和指针变量的区别#include<stdio.h>/*整型指针变量p,存储的值是整型变量age的内存地址符号&是取地址符,那么&age=00000033d07ff67c;由于指针变量本身也是一个......
  • C语言字符串拆分的两种方式strtok和正则表达式
    一、利用strtok()函数进行分割函数头文件#include<string.h>函数原型:char*strtok(chars[],constchar*delim);s[]是原字符串,delim为分隔符函数返回被分解的第一个子字......
  • 【Java初阶】面向对象三大特性之继承
    一、继承理解继承Cat继承了Animal类,其中:Animal类称为父类/基类或超类,Cat可以称为Animal的子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成......
  • C语言__基本类型
    基本类型类型占字节数short2字节int2字节/4字节long8字节double8字节float4字节char1字节无符号长度有符号长度signedcha......
  • C语言中将二维数组作为函数参数来传递
    c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:方法一, 形参给出第二维的长度。例如:#include<stdio.h>voidfunc(intn,char str[][5]){ inti; f......
  • c语言入门这一篇就够了-学习笔记
    c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、......
  • 笔记-C语言中static作用
    C语言中,static关键词可以用来修饰变量和函数,用static关键词修饰的变量成为静态变量。static关键词的作用主要包括3个方面:1.隐藏一个项目中往往包括多个.c文件,所有未加st......