最全【C语言】指针概要,2024年最新360°深入了解Flutter

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

在这里插入图片描述
由运行结果可以看出,char型指针加1向后走了1个字节,int型加1向后走了4个字节。

  1. 指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。
#include <stdio.h>
int main()
{
 int n = 0x11223344;
 char \*pc = (char \*)&n;
 int \*pi = &n;
 \*pc = 0;   //观察执行这两句时内存的变化
 \*pi = 0;   
 return 0;
}

在这里插入图片描述

由结果可看出char* 的指针解引用只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。

三、野指针

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

野指针出现的原因:

  1. 指针未初始化
#include <stdio.h>
int main()
{ 
 int \*p;//指针未初始化,默认为随机值
 return 0;
}

  1. 指针越界访问
#include <stdio.h>
int main()
{
    int arr[10] = {0};
    int \*p = arr;
    int i = 0;
    for(i=0; i<=11; i++)
   {
        //当指针指向的范围超出数组arr的范围时,p就是野指针
        \*(p++) = i;
   }
    return 0;
}

  • 指针指向的空间释放

四、二级指针

指针变量也是变量,是变量就有地址,指针变量的地址被称为二级指针。
在这里插入图片描述

  • *pp 通过对pp中的地址进行解引用,这样找到的是 pa, *pp 其实访问的就是 p .
  • **pp 先通过 *pp 找到 p ,然后对 p 进行解引用操作: *p ,那找到的是 a

五、字符指针

在指针的类型中我们把char*这种指针类型称为为字符指针

char str1[]="Hellow world";
char str2[]="Hellow world";

const char\* str3="Hellow world";
const char\* str4="Hellow world";

在这里插入图片描述

字符指针的一般使用方式为:

int main()
{
 char ch = 'w';
 char \*pc = &ch;
 \*pc = 'w';
 return 0;
}

还有另一种使用方式为:

int main()
{
 const char\* pstr = "hello world.";//这一句代码意思是将首字符的地址放在了patr上,而不是把字符串
 printf("%s\n", pstr);
 return 0;
}

六、数组指针

定义

  • 指针数组:存放指针的数组
  • 数组指针:存放数组的地址
int\* p1[10];//指针数组
int(\*p2)[10];//数组指针

对于int* (p2) [10]
解释:p先和结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。
这里要注意:[ ] 的优先级要高于 * 号的,所以必须加上()来保证p先和 * 结合。

数组名

int arr[10];

数组名通常表示数组首元素地址,两个情况例外:

  1. sizeof(数组名)
  2. &数组名
    这两种情况数组名表示整个数组
#include <stdio.h>
int main()
{
 int arr[10] = { 0 };
 printf("arr = %p\n", arr);
 printf("&arr= %p\n", &arr);
 printf("arr+1 = %p\n", arr+1);
 printf("&arr+1= %p\n", &arr+1);
 return 0;
}

在这里插入图片描述
从程序运行结果可以看出&arr和arr,虽然值是一样的,但是意义却不一样。

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值