C语言指针学习一

一、指针是什么?
指针就是地址。
二、地址是什么?
地址就是内存单元的编号。
三、什么是内存单元的编号?

操作系统的内存可以字节为单位进行划分,划分出来的这样的一个个内存单元,每一个内存单元都有一个编号。

(注意内存单元不是以位进行划分,是以字节进行划分。一个字节可以分为8位,这8位上是0(或1)。)

四、指针和指针变量的区别:

指针:

指针就是地址,地址就是指针,地址就是内存单元的编号。换句话说指针就是内存单元的编号,

内存单元的编号是一个值,即一旦给定,就是常量值,或者简单的说指针就是个编号。

指针变量:

指针变量是存放地址的变量,也就是存放指针的变量。

区别出来了吧:指针是一个值(指针就是个编号),指针变量是一个变量。

指针和指针变量是两个不同的概念,

但是大多数老师讲课或者口述时也会把指针变量称为指针,

但是我觉得对于这个称呼最好前边价格限定比较好,

比如p的指针(指的是指针变量p此刻的值)


指针变量小程序:

#include<stdio.h>
int main()
{
   //p是变量的名字,int *是一种类型,
   //这种类型后面跟p变量,表示p变量存放int类型变量的地址,
   //p变量就叫做指针变量,注意这里的*p不叫指针变量。
   int * p;     
   int i = 3;
   //&是取地址符号,&i表示变量i在内存中的地址,
   //给p只能赋值地址,如果写成p = i;是错误的,
   //因为p中只能存放int型变量地址,而i只是一个int型变量
   p = &i;  
   return 0;
}

①对于int * p;的理解:

int * p;不表示定义了一个叫做*p的变量,

其实这一点可以从p = &i;编译成功反推出来,

如果*p是变量名,那么p是一个没有定义的变量,如果赋值的话,编译肯定会报错未定义的变量。

int * p;应该这样理解:p是变量名,p变量的数据类型是int *。

所谓int *类型就是存放整型变量地址的数据类型。

②如果p保存了i的地址,那么p就是一个指向i的指针变量。

p不是i, i也不是p。修改p的值不影响i的值,修改i的值也不影响p的值。

如果一个指针变量指向了某个普通变量,则*指针变量等完全等同于普通变量,但这并意味*指针变量就是开始定义好的一个变量。

③注意下面的两个书写格式

int * p;这个语句中,int和*之间有空格,*和p之前有空格。

p = &i;

*p = i = 3;这个语句中*和p之间没有空格。

虽然*p写成 * p(*和p之间带空格好像编译不报错,但是我觉得这么写不够规范。)

*p是以p的内容为地址的的变量:p的内容就是i的地址,翻译过来就是以i的地址为地址的变量,所以它和i完全等同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值