C语言学习:指针学习一

前言

(1)
内存中最小的存储单位是存储单元,一般是8个二进制位(也就是一个字节)。存储单元可以存储数据和读写数据
(2)
内存中每一个存储单元都有一个编号,也就是“地址”。
(3)
定义一个变量:
int a = 3;
深度理解来讲,可以理解为,auto int a = 3;
这一句话就告诉了编译器,将a放在动态存储区,一共有四个字节(看具体编译器),变量名是a,其存放的值是3
然后,后面在使用的时候,可以通过a来使用该变量(其实是通过变量名找到存储单元的地址,从而对存储单元进行
存取操作的,即将变量名转换成变量的地址)

(4)
如上所说,a占了四个字节,那么相当于跨了四个存储单元,需要注意的是,这四个单元是连着的,由于已经告诉了
内存占四个字节,那么接下来的变量再分配的时候,是在这四个单元之后再分配。

指针

定义指针变量

类型名 * 指针变量名

int * pointer;

如上所示:定义了一个int 类型的 指针变量

给指针变量赋值

int a = 4 ;
pointer = &a;

如上所示:将定义的a变量的地址交给定义好的指针变量

关系

变量a 在使用时,编译器自动将a转换成变量的地址,但是也可以手动获得:

&a
通过这个可以得到这个变量的地址

通过pointer = &a 可以认为是指针变量pointer 指向了整型变量a

*pointer = 1 ;

发现可以将int类型值1交给*pointer,那么*pointer可以认为是变量a。
总结来讲:

& : 取地址运算符

‘*’:指针运算符(间接访问运算符)

指针变量存放的是变量的地址

int * pointer = &a;
* pointer 等价于 a

如图:
这里写图片描述

下面看个例子:

int main(){

int a,b;
int * pointer_a,* pointer_b;
pointer_a = &a;
pointer_b = &b;
printf("请输入两个数字");
scanf("%d,%d",&a,&b);
printf("您输入的值是:a=%d,b=%d",a,b);
printf("开始进行变换");
int tem;
tem = * pointer_a;
* pointer_a = * pointer_b;
* pointer_b = tem;
printf("你输入的值变成了:a=%d,b=%d",a,b);
 return 0;
}

为啥需要基类型

发现指针变量都有基类型。

因为不同类型的数据在内存中所占的字节数和存放方式是不同的。如果想通过指针引用一个变量,只是通过一个地址不行。
它并不知道从一个还是两个字节中取出数据,所以基类型知道了才能按存储单元的长度和数据的存储形式正确的取出数据。
并且下面的指针的移动和指针的运算等运算都是需要基类型。

指针变量可以作为函数参数

既然指针变量是一种变量,那么就可以作为函数的参数,可以实现将一个变量的地址传送到另外一个函数中。

void swap (int * p,int * p2){ //省略了}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值