C语言学习记录2——指针类型、野指针、二级指针、指针数组

1、指针类型的意义

        指针类型有两个意义,不同的指针类型在分配字节空间的时候都是4字节(32位)。但是在解引用的时候能够体现出不同指针类型的区别。

        ①指针类型在解引用的实现中访问权限不同。

int a = 0x11223344
int *pa=&a;
    *pa=0;
//此时指针pa的解引用会把内存a中的所有值改写为0
//因为指针pa和a的类型相同

char* pc=&a;
*pc = 0;
//这个时候指针pc能够正常赋值,但是解引用时只会清零一个字节
//此时a中存的就是0x00223344

        ②指针类型决定了指针每走一步的步长为多少

int arr【10】={0};
int *p = arr;
char *pc = arr;
printf("%p\n",p);
printf("%p\n",p+1);

printf("%p\n",pc);
printf("%p\n",pc+1);
//int型每走一步+4个字节,char型每走一步一个字节

2、野指针

野指针的概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制)

①指针未初始化

int main()
{
    //这样定义的指针就是一个野指针
    int *p;//局部变量指针未初始化,默认为随机值
    *p = 20;//*p解引用的时候非法访问内存了,因为在定义的时候没有申请确定的内存空间
    return 0;

}

②指针越界访问

int main()
{
    int arr[10]={0};
    int *p=arr;
    int i=0;
    for(int i=0;i<=10;i++)
    {
        //当指针指向的范围超出数组arr的范围时,指针p越界访问,视为野指针
        *(p++)=i;
    }
    return 0;
}

③指针指向的空间释放了

3、二级指针

        二级指针简单的来说就是一个指向指针的指针。

int main()
{
    int a = 38;
    int* pa = &a;//pa是指针变量,一级指针
    
    int**ppa = &pa;//ppa是一个二级指针变量,它指向pa的起始地址

}

4、指针数组

        指针数组本质是数组,就像函数指针本质是指针,指针函数本质是函数。

        指针数组里面存放的是指针,指针数组里面每一个元素就是一个指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值