C语言指针

写在前面的话

最近想用几篇文档把C语言的大概表述一下,也算是自己温习一遍了。

俗话说得好,只要把指针的理解清楚了,那C语言也就算是知晓大概了。这篇博文就只介绍指针

首先看下指针的简介
  • 究竟什么是指针呢?一般来讲,指针是一个其数值为地址的变量(或者一般地说是一个数据对象),这句话可能理解起来有点抽象,下面举个实例来讲解下。
  • 首先介绍下与指针相关的运算符
    • 地址运算符:&
      • 后面跟一个变量名时,&给出该变量的地址
      • &num 表示变量num的地址
    • 间接运算符:*
      • 当后跟一个指针名或地址时,*给出储存在被指向地址中的数值
      • num = 22;
      • ptr = &num //指向num的指针
      • val = *ptr //将ptr指向的值赋给val
  • 指针声明
    • int *ptr; //ptr是指向一个整数变量的指针
    • char *pt; //pt是指向一个字符型变量的指针
      • 建议把后面的解释多读几遍
    • 类型标识符表明了被指向变量的类型,星号(*)表示该变量为一指针。
    • 声明int * ptr;的意思是pi是一个指针(它的值是地址,是一个常量),而*ptr是int类型的(该地址储存的变量是int类型的)
讲到这里可能有些人理解的还不是清楚,指针代表着地址,那地址究竟又是什么呢?
  • 解释下地址的概念
    • 在现在通常来说,访问地址的最小单位是字节 Byte,也就是8Bit
    • 玩过单片机的同学都会知道,CPU有的是16位,32位等,也代表CPU的地址总线有几根
      • 地址总线16根,每一根状态是0或1,那么一共就有2^16不同选择,同理32位
        在这里插入图片描述
      • 那么在内存中地址和储存的变量是什么样子的呢
      • 首先要知道不同的数据类型所占的内存大小
        在这里插入图片描述
    • 我们再用一个图表示指针、地址、变量的关系
      在这里插入图片描述
  • 我们已经了解了指针的含义已经与地址、变量之间的关系,那么指针有什么用处呢,俗话说指针是C语言的灵魂,下面通过一个指针简单的例子来说明下
  • 使用指针在函数见通信
#include<stdio.h>
/*-----------------------------------------------------------------------------------*/
void interchange(char *a_,char *b_)
{
	char temp = 0;
	temp = *b_;
	*b_=*a_;
	*a_=temp;
}
void main()
{
	char a=5,b=10;
	printf("Original value %d %d\n",a,b);
	interchange(&a,&b);
	printf("After interchange %d %d\n",a,b);	
	/*
	Original value 5 10
	After interchange 10 5
	*/
}
  • main函数定义的两个变量被interchange函数改变了,并且在这个例子中,我们并没有使用全局变量。只是将main函数内声明的两个变量的地址当做参数传给了interchange函数
  • 一个函数可以更改另一个函数中的数值,而不通过全局变量仅仅靠指针就能做到,其实靠的就是改变指针指向的地址中的值,有点拗口,interchange函数直接操作的对象不是变量,而是指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值