C语言学习笔记:C指针

指针基本知识

C语言是我接触的第一门编程语言,当时学习C语言的时候,遇到的第一个难点就是指针。我觉得大多数人在学习C指针的时候都或多或少有过困惑,最近正好在复习C语言,对指针的理解由加深了,现在来总结一下。

地址和指针

变量的内容和地址

在提到了指针的时候,我们不可避免的会涉及到地址和指针的关系。

我们在学习计算机基础的时候就知道,计算机中的所有数据都是存储在内存中的存储单元的,存储单元说白了就是内存中的一个字节。

注意:
不同类型的数据所占用的字节数是不一样的

举例:
在这里插入图片描述
那么我们刚才提到的地址和存储单元有什么关系呢?我们可以假设在内存中,每个存储单元都是有编号的,而这些编号就是地址。

下面我们利用下图来详细解释一下这个概念。
在这里插入图片描述
从上面的图中,我们可以知道int型变量的值是4,存放在内存为它开辟的内存地址为1001-1004的存储单元中。

我们可以概括一下:变量内容为4,变量地址为1001-1004.

说完了变量的内容和地址后,我们来看看怎么实现变量的访问

直接访问和间接访问

一般来讲,我们有两种变量访问的方式:直接访问和间接访问。

  • 直接访问:直接用变量名从对应的地址存取变量的值的方式就是直接访问。

举例:
a=a+b
在这里插入图片描述

  • 间接访问:将变量a的地址存放在另一个变量p中,访问时先从p中取到变量a的地址,再根据该地址存取变量的值,像这种借助了中间变量p来访问变量a的方式就是间接访问。

间接访问的示意图:
在这里插入图片描述

指针的概念

通过上面的铺垫,我们就可以引出指针的概念了。

在间接访问中,我们指出可以通过另一个变量存储的地址来访问所需要存取的变量。下面我们通过图解的方式来展示指针的相关概念。
在这里插入图片描述

注意:
地址≠简单的数字,它含有以下两个概念:
1、存储位置
2、变量类型
所以:定义指针变量的时候,我们需要指明它所指向变量的类型。

指针变量

在了解了指针的基本概念后,我们就可以讨论指针变量了。

指针是地址,如果我们将一个变量的地址赋给存放指针的指变量,那么这个指针变量就指向了该变量。如图:
在这里插入图片描述

指针运算符

在了解指针具体实现之前,我们要了解一下指针的运算符,一般来说,指针运算符涉及到以下两种:

  • 地址运算符 &
    (1)作用:取地址
    (2)单目运算符,自右向左的方向结合

  • 取值运算符 *
    (1)作用:其“指向”作用,和指针结合,获取指针所指向变量的值,进行间接访问操作
    (2)单目运算符,自右向左的方向结合

在这里,我们需要根据它的优先级(优先级相同)和结合性(自右向左的方向)来区分一下&和*混合用法

  • &*
    在这里插入图片描述

  • *&
    在这里插入图片描述

指针变量的定义引用

  • 定义格式:
基类型名  *指针变量名[=&变量名]

在这里插入图片描述

给指针变量赋初值的方法有如下两种:

方法一:
int *p=a;
方法二:
int *p;
p=&a;

注意:
在给指针变量赋初值的时候不能直接赋一个unsigned 型数字,虽然我们知道地址是unsigned 型数字,但是unsigned 型数字不能存储地址,只有地址量才可以给指针变量赋初值,指针变量也不可以存储地址。
在这里插入图片描述

  • 调用格式
* 指针变量    //间接访问指针变量所指向的值
  • 代码示例
#include<stdio.h>
int main() {
	int a=4,*a1=&a;
	float b=6.6,*b1=&b;
	char c='s',*c1=&c;
	printf("直接访问变量a:%d,用指针变量间接访问变量a:%d\n,",a,*a1);
	printf("输出&a:%d,输出a1:%d\n",&a,a1) ;
	printf("直接访问变量b:%f,用指针变量间接访问变量a:%f\n",b,*b1);
	printf("输出&b:%d,输出b1:%d\n",&b,b1) ;
	printf("直接访问变量c:%c,用指针变量间接访问变量a:%c\n",c,*c1);
	printf("输出&c:%d,输出c1:%d\n",&c,c1) ;
	return 0;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值