【C语言】指针也就那么回事儿~【初阶】

目录

一、指针是什么

定义 

使用举例 

二、指针和指针类型

指针类型的意义

定义指针变量的一般形式

在定义指针变量时要注意两点

在对指针变量赋值时需要注意

指针的解引用

三、野指针

1、指针为初始化

2、指针越界访问

四、指针运算

五、指针和数组


        在了解指针之前,我们先认识一下与指针紧密相关的两个概念:内存单元的地址和内存单元的内容。

        内存单元的地址是用来唯一标识每个内存单元的数字或者字符。它类似于房间号,用来指示内存中的特定位置。地址通常以十六进制表示,例如0x0000A5F0。

        内存单元的内容是存储在内存中的数据。它可以是任何类型的数据,例如整数、浮点数、字符或者指针等。计算机可以根据地址访问并读取或写入内存单元的内容。

一、指针是什么

定义 

        1、指针是内存中一个最小的单元编号,也就是地址

        2、指针变量是用来存放内存地址的变量

        3、指针变量的值(即指针变量中存放的值)是地址(即指针),有些绕,根据图示再来认识一下。

【C语言】指针也就那么回事儿~【初阶】_第1张图片

        指针变量p中存放的是变量i的地址,即通过p能知道i的地址,从而找到变量i的内存单元。举个例子:一个房间的门牌号是2000,这个2000就是房间的地址,或者说2000“指向”这个房间。

使用举例 

        在程序代码中的使用:

int i = 3;//内存中开辟一块空间,存放i的值

int* p = &i;//用&操作符把i的地址取出来,赋值给p,这里p就是一个指针变量,存放的是变量i的地址


二、指针和指针类型

指针类型的意义

        决定了指针向前或向后走一步有多大。例如:一个指针时指向一个整型变量的,那么“使指针移动1个位置”或“使指针加一”意味着移动4个字节;如果指针指向的是一个字符型变量,那就意味着移动1个字节。

定义指针变量的一般形式

        基类型 * 指针变量名

        例如:

int* p;        //指向整形变量的指针变量

char* k;     //指向字符型变量的指针变量

float* m;    //指向float型变量的指针变量

double* n; //指向double型变量的指针变量

在定义指针变量时要注意两点

  1. 指针变量前面的*表示该变量的 类型为指针型变量。指针变量名是p,而不是*p。
  2. 在定义指针变量的时候必须指定基类型。

在对指针变量赋值时需要注意

  1. 指针变量只能存放地址,不要将一个整数赋给一个指针变量。
  2. 赋给指针变量的地址不能是任意的类型,只能是与指针变量的基类型具有相同类型的变量的地址。例如:整型变量的地址可以赋给指向整型变量的指针变量,但是浮点型变量的地址不能赋给指向整型变量的指针变量。

指针的解引用

        解引用 * 就像打开盒子一样,盒子里面装的是a的操作地址 当我打开这个盒子,找到a的地址,我就找到a了。


三、野指针

1、指针为初始化

int* p;//指针未初始化,默认为随机值

int* p = NULL;    //空值

2、指针越界访问

例如:

int main()
{
	int arr[10] = { 0 };
	int* p = arr;
	for (int i = 0;i <= 11;i++)
	{
		//当指针指向的范围超出数组arr的范围时,p就是野指针
		*(p++) = i;
	}
}


四、指针运算

在指针指向数组元素的时候,可以对指针进行一下运算:

·加一个整数(用+或+=),如p+1

·建一个整数(用-或-=),如p-1

·自加运算,如p++,++p

·自减运算,如p--,--p

·两个指针相减,如p1-p2(只有p1和p2都指向同一数组中的元素时才有意义),得到的是p1所指元素与p2所指元素之间相差元素的个数。

五、指针和数组

int arr[10];        //定义一个整型数组arr

int* p = arr;      //p指向数组arr首元素arr[0]

数组名表示的是数组首元素的地址。

        p+i 和 arr+i 就是数组元素 arr[i] 的地址,也就是它们指向arr数组的第i个元素;

        *(p+i)或 *(arr+i)是p+i或arr+i所指向的数组元素,即arr[i]的值;

        *(p+5),*(arr+5),arr[5]三者等价。
六、二级指针

int a = 10;

int* p = &a;//a的地址存放在p中,p是一级指针

int** pp = &p;//p的地址存放在pp中,pp是二级指针

【C语言】指针也就那么回事儿~【初阶】_第2张图片

你可能感兴趣的:(c语言,指针)