C语言指针导图和练习题

本文详细介绍了C语言中的内存地址概念,指针变量的使用,包括不同类型指针的区别、const修饰的指针、指针运算(如数组遍历)、避免野指针的方法以及assert断言的运用。同时探讨了指针在函数传参中的角色和类型对访问的影响,以模拟实现strlen为例.
摘要由CSDN通过智能技术生成

1.内存和地址

    内存被分为N个1个字节大小的内存空间,没个内存空间都有一个内存编号也就是地址,而C语言将这个地址称为指针,也就是 内存编号 == 地址 == 指针;

2.指针变量和地址

指针变量

       我们将C语言的类型+变量 称为什么变量,比如说int a 就是一个整形变量,那指针变量是什么样子的呢? int* 变量名 也就是整形指针变量,float* 变量名 就是单精度指针变量.

地址

     有了指针变量,那指针变量是干什么的呢?指针变量其实就是 存放 同类型变量的地址的一块空间 如图


int* p 存放的是 int a 的地址;
那如何最基本的使用指针呢?就需要 解引用& 和 取地址符号*进行操作了

可以发现整形指针 p 的地址存储的就是,a变量的地址 通过*p 来操作变量a的值

3.const修饰的指针

       const 在 * 前面

             指向地址的存的值不能更改 const void * or void const * 

        const 在*  后面

            指向的地址不能更改 void * const 

4.指针运算

     指针+-整数

         因为数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸⽠就能找到后⾯的所有元素。


 用指针+整数来打印数组.
 *(p+i)==p[i]==arr[i]==*(arr+i)
 

 指针减指针
  

5.野指针

  野指针也就是1.没有初始化的指针2.指向的内存空间被释放3.越界访问
  如何避免呢 1.使用指针前进行判断,初始化,避免返回局部变量,小心越界方访问

6.assert断言

  aseert需要用到<assert.h>头文件,可以用于测试问题

7.指针的使用和传址调用

用指针来接收 传入函数值的地址 直接操作 变量 ,而不是在开辟一块新空间用于重新存储传入函数的变量

8.指针变量类型的意义

我们说int变量用int*指针 那char 类型也可以用 int *指针吗 来测试一下

发现和我们想要的预期结果不是一样 是什么问题导致的呢?
是因为指针变量的类型决定了 一次访问几个字节,用int* 来访问 char类型的数组,会一次跳4个字节 所以打印的是 a e ???? 指针访问超出了我们给定的这个char数组给定的范围,导致了e后面的4个字节为?问号的原因
总结 指针变量类型决定了 加减数字的时候一次跳过多少个字节,也决定了一次解引用时访问几个字节


题目

   1.模拟实现strlen

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值