目录
前言
指针在C语言中是一个比较难理解的东西,需要花费更多的时间,个人对这方面内容了解也不算太深,只能带你们简单理清一下。
一、什么是指针
指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。
以上是百度百科对C语言指针的解释
通俗的来说,指针就是指向一个变量的位置或者地址的东西,举个简单的例子,比如说一所学校,它的地址是XX路XX号,那么“XX路XX号”就是一个地址,也可以理解为指针,它指向这个学校,通过这个地址,你可以找到这所学校的位置。
下面给出两张图加深理解一下
二、指针的几个概念
1、一维指针
一维指针就是常见的类似于int*的东西
int* p=NULL;
上边就是定义了一个一维的指向int类型的指针p
2、二维指针
二维指针就是指向指针的指针,就是上面第一张图中最大的阿尼亚,一般用来定义链表的时候用。
int* p=0;
int** k=&p;
上边定义了一个指向一维指针p的二维指针k
3、指针数组
在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组本质是是一个数组,数组内每一个元素都是一个指针。
int *p[10];
上面定义了一个指针数组p[10],里面存的是指针
4、数组指针
数组指针是指一个指向数组的指针,本质是一个指针,相当于一个二级指针。注意与指针数组的区别
int (*p)[10];
上面定义了一个指向数组的指针p,p就被称为数组指针。
三、指针的运算
1.定义一个指针用*号
int *p=NULL;
一般来说指针在定义的时候尽量初始化,即让它指向一个东西
2.指针指向一个变量需要取地址,必要时用&(取地址)符号
int a=3;
int arr[6]={0};
int *p_a=&a;
int *p_arr=arr; //数组名本身是一个地址
3.两个指针都指向数组中的某个元素时可以相减,返回两者间元素个数
int arr[6] = { 0 };
int* p1 = arr;
int* p2 = &arr[3];
cout << p2 - p1; //c++的输出语句,输出3
注意:两指针不能相加,无意义!!
4.获取指针内容时用*号
int a = 1;
int* p = &a;
cout << *p; //获取p指向的内容
总结
懒得写。。。