走过路过不要错过!!!指针进阶(一)

目录

       一、字符指针

       二、数组指针 

                1、数组指针的定义

                2、&数组名和数组名

                3、数组指针的使用

       三、数组传参和指针传参

                1、一维数组传参

                2、二维数组传参

                3、一级指针传参

                4、二级指针传参

一、字符指针

       在指针的类型中我们知道有一种指针类型为字符指针 char*。像下面的形式就是字符指针。

int main()
{
	char ch = 'w';
	char* pc = &ch;
	*pc = 'w';
   
    const char* p = "hello world.";//这里是把一个字符串放到p指针变量里了吗?
    printf("%s\n", p);
	return 0;
}

      在这里特别容易让我们以为是把字符串 hello world 放到字符指针 p 里了,其实不是,只是把字符串 hello world. 的首字符的地址放到了p中。 *p指向的是数组常量不能被改变所以用const来进行修饰。


二、数组指针

       1、数组指针的含义

       数组指针到底是数组还是指针,在这里我的回答是指针,它指向数组的指针。

       整形指针:int* pint ,能够指向整型数据的指针。

       浮点型指针:float* pf ,能够指向浮点型数据的指针。

       数组指针:int (*p) [10],能够指向数组的指针。

       p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整形的数组,所以p是一个指针,指向一个数组,叫数组指针。

       注意:[ ]的优先级要高于*号的,所以必须加上( )来保证p先和*结合。

       2、&数组名和数组名

int arr[10];

        我们都知道数组名是首元素地址。&arr又是什么呢?

        可以看出数组名和&数组名打印出来的地址是一样的。但是他们还是有区别的,如下:

       上述发现,其实&arr和arr ,虽然值一样,但是意义是不一样的。

       实际上:&arr表示的是数组的地址,而不是数组首元素的地址。本例中&arr的类型是 int ( * )[10],是一种数组指针的类型。数组的地址+1,跳过了整个数组的大小,所以&arr+1相对于&arr的差值是40字节。

        3、数组指针的使用  

        数组名arr,表示首元素的地址,但是二维数组的首元素是二维数组的第一行,所以这里传递的arr,其实相当于第一行的地址,是一维数组的地址,可以数组指针来接收。


三、数组传参和指针传参

        1、一维数组的传参

        以上的传参方式都是可以的。 

        当我们使用一维数组传参的时候,有三种接收方式:省略接收,完整接收,一级指针接收。

        当我们使用指针数组传参的时候,有两种接收方式:完整接收,二级指针接收。

        2、二维数组的传参

        二维数组传参的时候,有三种方式:完整接收,省略行接收,数组指针接收。

        在这里二级指针接收方式就不行了,因为二维数组在传递时,传递的是第一行第一列元素的地址,本质上仍是一级指针,如果想换成一级指针接收,就更错了,因为单纯靠一级指针无法判断一行有几个元素,是无法访问的。因此如果就想用指针接受的话,就得用数组指针,这种指针包含了一级指针和列元素这两个重要条件,可以进行正常访问的。

        3、一级指针的传参

        无论是直接传递数组名还是传递指针,本质上都是一样的,都是指针,因为数组名就是首元素地址,也就是指针,因此两种方式传参,最后用一级指针接收就行。 

        4、二级指针的传参

 

       二级指针传参时,可以直接传过去,也可以取到一级指针的地址,然后再传过去,本质上是一样的,只不过借助了一级指针这个工具而已。  

本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

 

老铁们,记着点赞加关注哦!!!

  • 2
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论 2

打赏作者

x一季花开成海x

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值