大家好,今天追秋再一次与大家见面啦!!!
今天给大家带来的是关于指针的一些知识,喜欢的朋友们可以点个关注哦
指针理解的2个要点:
- 指针是内存中一个最小单元的编号,也就是地址
- 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
总结:指针就是地址,口语中说的指针通常指的是指针变量。
下面给出内存的一些理解:
指针变量
我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个变量就是指针变量
下面我们开始讨论指针
这里我们在讨论一下:指针的类型
我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?
准确的说:有的。
当有这样的代码
int num = 10;
p = #
要将&num(num的地址)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的呢?
我们给指针变量相应的类型:
也就是之前定义变量的类型是相同的:
char* p=NULL
short* p=NULL;
;int* p=NULL;
还有其他类型的指针就不一一列举了
char* 类型的指针是为了存放 char 类型变量的地址。
short* 类型的指针是为了存放 short 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址
我们知道,**在固定的环境下,指针的大小是固定的,在32/64位机器上分别是4/8字节的大小,那既然指针大小都是一样的,为什么还要去设立其他的指针类型呢?为什么不用一种通用的指针来进行使用呢?**下面就给大家详细讲解一下:
下面还是老规矩,举例来说明指针类型的意义
仔细看的小伙伴可以发现,两次调试使用的指针类型是不一样的,最后得到的结果也是不一样的,所以:
总结:不同类型的指针大小虽然一样,但是指针类型决定了指针在进行解引用操作的时候可以申请访问的字节数,也就是使用的字节的范围大小(如上面例子所示),
比如:char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。和我们之前学习的基本类型所占空间的大小是一致的。
下面举例:
总结:指针的类型决定了指针向前或者向后走一步有多大(距离)。
因此,我们在访问内存空间的时候,选择合适的指针类型会让我们的解题更加方便,误会造成不必要的困难
概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
注:这里给大家举一个简单的例子其中包含的内容较多,博主现在还是个小渣渣,还无法写道更加详细的内容,大家可以期待一下以后的博文更新。
这个点可以参考野指针成因里面的讲解。
当指针指向的地址被释放,及时将该指针置为空指针,也就是NULL。
这个点可以参考野指针成因里面的讲解。
看这部分代码来说明:(其它未写部分均有效)
#define N_VALUES 5
float values[N_VALUES];
float *vp;
for(vp = &values[N_VALUES]; vp > &values[0]
{
*–vp = 0;
}
我们知道数组名表示的就是数组首元素的地址,当然有普遍性就有特殊性,下面我们来看:
我们知道,指针变量也是变量,而指针不就是用来存放地址的吗?下面我们来看二级指针
好了,到这里我们今天的分享就到这里了,期待我们的下次见面!!!