指针的内容

1.指针是什么

  通俗的讲,指针就是地址,但严谨的说,指针是存放地址的指针变量。指针变量的大小在32位机器上为 4个字节,64位机器上为 8个字节。

  动态内存分配:使用如malloc(C/C++)、new(C++/C#)等函数或操作符动态地分配内存,并通过指针来访问这些内存区域。
  数组和字符串:在C/C++等语言中,数组名本质上是一个指向数组首元素的指针,字符串也通常通过字符指针(以null结尾的字符数组)来表示。
  函数参数和返回值:通过指针,函数可以修改传递给它的参数的值,或者返回多个值。
  数据结构和算法:在实现复杂的数据结构(如链表、树、图等)和算法时,指针是不可或缺的工具。

2. 指针类型的意义

  +1/-1操作时跳过几个字节取决于指针类型,如 int* 类型跳过4个字节,char* 类型跳过1个字节。

  解引用操作时的权限,解引用操作时访问几个字节的大小取决于指针类型

3. 指针的运算

(1)+ -整数,实现指针的偏移,指向其他元素

(2)指针 - 指针 ,得到的结果是两个指针之间元素的个数,而不是字节个数(指针 + 指针是非法的)

(3)指针的关系运算,就是用<、<=、> 和 >= 运算符来比较两个指针。

4.指针数组

  指针数组就是一个存放指针变量的数组,数组里面的元素全都是指针变量。

例:int* arr[3] = {p1,p2,p3}; 里面的p1,p2,p3就是指针,类型为int*。

5.数组名是什么

  数组名通俗的讲就是数组首元素的地址(特别注意数组名只是地址而不是指针),但也有例外情况

(1)sizeof 数组名(例 sizeof(arr)),这里的arr代表的是整个数组的地址,虽然它的地址还是和数组首元素的地址相等,但是它们的含义不同。

 (2)&数组名(例 &arr),这里的啊让人代表的也是整个数组的地址

6.数组指针

  数组指针就是指向数组的指针。

int arr[3] = {1, 2, 3};
int (*p)[3] = &arr

   注意这里的 * 不在表示解引用,而是告诉我们,这里的p是一个指针。加上括号()来防止p先和[3]结合。且这里要用整个数组的地址&arr,而不是首元素地址arr。

7.函数指针

  函数也是有地址的,函数指针就是指向函数的指针

int Add(int x, int y)
{
  return x + y;
}
int main()
{
  int (*p)(int, int) = &Add;
  int sum = p(2, 3);//通过函数指针使用函数
  return 0;
}

  这里p就是函数指针,它的类型为 int (*)(int, int)  。sum的值为5。

8.存放函数指针的数组

  就是一个数组,里面存放的全都是函数指针(例 int (*parr[3])(int, int)),parr[3]就是一个函数指针数组,里面的每一个元素类型都是int (*)(int, int)。

9.回调函数

  回调函数就是通过函数指针调用的函数,通俗的讲就是创建一个函数指针,在一个函数中,我通过函数指针调用了那个函数,那么函数指针指向的那个函数就是回调函数

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值