C# 指针详解(下)

使用指针访问数组

  • 数组名

数组名是数组首元素的地址,但要注意两点:

1.sizeof(数组名):这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节.
2.&数组名:这里的数组名也表示整个数组,取出的是整个数组的地址.

  • 指针访问数组

在访问数组时,首先要拿到数组数组首元素的地址存到指针变量中,然后再通过指针的±来对下一个元素进行访问(注:因为数组在内存中是连续存放的,所以对指针加减一个整数即可访问下一个元素)

代码如下:

#include <stdio.h>
int main()
{
   //通过指针打印一维数组
   int arr[] = {1,2,3,4,5};
   int *p = arr;//也可写成&arr[0]
   size_t sz = sizeof(arr) / sizeof(arr[0]);
   for(int i = 0,i < sz;i++)
   {
      printf("%d ",*(p + i));  
   }
   return 0;
}

上面是通过指针来访问数组,我们再用下标来访问数组:

#include <stdio.h>
int main()
{
    int arr[] = {1,2,3,4,5};
    size_t sz = sizeof(arr) / sizeof(arr[0]);
    for(int i = 0;i < sz;i++)
    {
       printf("%d ",arr[i]);
    }
    return 0;
}

两个代码进行对比,我们就可以看出一维数组的本质,用下标进行对数组的访问,其实就是对指针的加减。把arr赋值给了指针变量p,再结合上述的代码,我们就可以得到一些结论:

*(p + i) == *(arr + i)== arr[i] == *(i + arr)== i[arr]

指针数组

指针数组就是用来存放指针的数组,如:

  • 整型指针数组----存放整型指针的数组----int *arr[ ]
  • 字符指针数组----存放字符指针的数组----char *arr[ ]
  • 函数指针数组----存放函数指针的数组----函数的返回类型+(*arr[ ])+ (参数列表)
    整型指针数组的运用如下:
#include <stdio.h>
int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    int *arr[3] = {&a,&b,&c};
    //通过遍历数组来对abc进行访问
    for(int i = 0;i < 3;i++)
    {
       printf("%d ",*arr[i]);
    }
    return 0;
}

数组指针

指向数组的指针,数组指针变量中存放的是整个数组的地址.
类型是:数组的类型+ (*)+ [数组元素的个数]
示例如下:

int arr[5] = {1,2,3,4,5};
int (*p)[5] = &arr //上面有提到(&数组名)代表整个数组的地址

char *str[3];
char*(*pf)[3] = &str; 
函数指针

指向函数的指针,函数指针变量中存放的是函数的地址.
类型是:函数的返回类型 + (*)+(参数列表)
示例代码如下:

#include <stdio.h>
int Add(int a,int b)
{
    return a + b;
}
int main()
{
   int (*p)(int ,int) = Add//也可写成&Adda
   int ret = (*p)(4,5);
   //Add赋值给了指针变量p,也就相当于int ret = Add(4,5)
   printf("%d\n",ret);
   return 0;
}

指针的基本内容就大致梳理完了,希望大家看了我这上下篇的指针讲解能有所收获,一起来学习吧!!

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值