让你爱上指针2❤

一:野指针以及如何规避野指针

1》:野指针的概念:野指针就是指针指向的位置是不可知的,(即随机的,不正确的,没有明确限制的),(野指针是非常危险的,就如同我们生活中的野狗一样,对我们有害的。)

int main()
{
   int *pr
   printf("%p\n,pr)     此时这个局部变量pr并没有进行初始化,那么它的值是随机的;
                         如果是全局变量或者是静态变量,也没有进行初始化,那么它的值是默认为0;
}

 2》:我们一般有两种方法来规避野指针

1.对指针变量进行初始化,这个比较简单就不再详细讲解了

2.NULL法,不知道指针是否初始化了,就可以写成

int main()
{
     int*p=NULL;
     上面的式子判断这个P是否已经存放相应的地址了,也就是判断是否为野指针。如果没有存放地址,即为野指针,那么编译器就会警告;如果存放地址了,就不是野指针,编译器可以正常运行
}

二:指针的使用与传址调用

1》:首先,函数的调用,分为两种。

        1:传值调用,没有用到指针         2:传址调用,用到指针

int main()
{
    int a=1;
    int b=1;
    Add(a,b)   此时这个函数传过去的便是a,b两个值
}
int main()
{

   char arr[]="1,2,3,5,6"
   Swap(arr),此时传递的是指向arr首个元素的地址,这就是传址调用
}

这里再强调一个比较细节的地方,在传值调用中,函数的实参传递给形参过程中,可以理解为形参是实参的一份临时拷贝,形参有自己的空间,对形参的改变不影响实参!

三:数组名的理解

1》:数组名是数组首元素的地址,而数组在内存中是连续存放的,所以找到首个元素的地址就可以找到所有元素的地址,所以可以用指针来访问数组的内容。

void Te(int *arr)
{
      这个相当于对数组首个地址进行解引用,从而知道这个数组全部的元素
}
int main()
{

     int arr={1,2,3,5}
     Te(arr),同理这个传递的是arr数组中首个元素的地址
}

当我们知道了这些知识时可以训练一下自己的冒泡排序。

四:二级指针

提到二级指针,那就不得不提一下一级指针

一级指针:char*p,int*arr等,这里的p,arr全部为指针变量,也是一级指针

二级指针:char**p,int**arr等;这里就拿int**arr来举例,这里的int*说明arr指向的对象是int*(这里面的*是第一个*),而*(这是第二个*),说明arr是指针变量,而arr则为二级指针。

五:指针数组

指针数组,这个本质上是数组,并不是指针!!!

数组有多种多样,比如整形数组,字符数组,当然还有今天的主角指针数组。

int *arr[]   这个就是数组中存放的每一个元素是整形指针

六:指针数组模拟二维数组

模拟出来的二维数组,本质上并不是二维数组!!!!!!

二维数组可以看作是一维数组的数组。

Te(int*arr)
int main()
{
    int arr1={1,2,3,5]
    int arr2={2,5,7,8}
    int arr3={2,3,5,6}
    int *arr={arr1,arrr2,arr3}
    Te(arr)

}

例如arr[1][2]------>int*(*(arr+1)+2),此时这个就是arr2中的7了

可以推出一个结论,arr[i][j]-------->int*(int*(arr+i)+j).

创作实属不易,请点个免费的小赞赞!!!!!!!谢谢观看!!!!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏蓄力中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值