指针入门

xiaoxiao2021-02-28  18

通过短暂的学习,了解到了指针的3种类型,分别是指针常量,常量指针,指针常量常量指针!

指针常量:

int const *p; 

表示P是一个指向常量的指针,这个时候*p的值是不可以被修改的,但是可以让p指向其他的地址。

常量指针:

int *const p  表示指针是一个常量,其本身不可以修改,但是他所指向的值可以修改。

指针常量常量指针:

const int *const p 

表示该指针是一个常量,并且它所指向的值也是一个常量,这种情况下其本身和它所指向的值都不可以改变。

 举个例子:

int a = 100,b = 200;     

int const *p1 = &a;                    //此时定义为指针常量

*p1 = 100;                              //尝试修改*p1的值是不合法的

p1 = &b;                                //可以让p1指向的值改变

=============================================================================

int a = 100,b = 200;

int *const p2 = &a;                   //此时定义为常量指针

p2 = &b;                                //此时尝试修改p2的指向是不合法的

*p2 = b;                                //但他指向的值可以改变

=============================================================================

int a = 100,b = 200;

const int* const p = &a;             //此时定义为指针常量常量指针,不可以改变的他的值

p = &b;                                 //这2种操作都是不合法的

*p = b;                                 

====================================================================================================

指针的值都可以认为是一个地址!(数组名本身也就是一个数组,调用函数传参数时可以传a,&a,&a[0]都是合法的)

指针也可以分为一级指针,二级指针等等!!

例如int *p1 = &a,此时*p1就是一个一级指针;int**p2 = &p1,此时p2就是一个二级指针。二级指针只能指向一级指针,不能直接指向a;

再就是指针只能指向已经分配好的内存区域,如果你不想直接初始化时给指针一个值,而是想要提前准备一个空间往里面赋值,我们也

可以提前分配你给内存,借助malloc函数我们可以先开辟一个空间,例如p = (int *)malloc(sizeof(int)*100);就可以理解为我们像计算机

申请了一个占400个字节的区域(因为int一般情况下占4个字节的空间,我们就申请了4*100 = 400个字节的空间)。当然,我们在实际

运用中也有可能发生计算机内存不足的情况,我们可以用if(!p)做个判断来确认计算机是否给我们分配了内存。

还有可能我们提前的内存不够,我们可以使用relloc函数来重新申请分配内存空间。使用方式为:int* realloc(void* ptr, unsigned newsize);  其中参数ptr为原有的空间地址,newsize是重新申请的地址长度。使我们在实际运用中可以灵活分配空间来减少计算机内存的浪费!!

转载请注明原文地址: https://www.6miu.com/read-1600279.html

最新回复(0)