初识指针

一、指针概述

1.1、内存地址

  • 计算程序使用的所有数据都存储在计算机的存储单元中,并能从存储单元中取出。
  • 计算机中的每个存储单元都有唯一的地址。
  • 计算机内存被划分为按顺序编号的内存单元,即内存地址。
  • 内存单元的长度位8bits

  • 程序中的变量,在编译时,系统才会给他分配内存单元(内存地址)。
  • 变量是内存中某一块存储区域的名称,对变量赋值就相当于把值存储到该存储区域中。

32位内存中,一个内存单元所占的字节数

1个内存单元的长度是8bits,占一个字节。

32位是指地址长度,四个字节。

内存地址指向内存单元(可能1个或更多),32位系统每次读取的内存单元都是4个字节的偶数倍,可能会根据需1653要忽略多余的字节。

寻址地址是根据你的CPU的地址总线来确定回的,跟内存没多大关系。

至于8字节的内存单元是认为定答义,是为了兼容性和编程实现考虑的

1.2、内存和指针

变量的内存地址就是变量的指针

 

 

二、指针变量

int *p;   p为指针变量

2.1、初识指针

&取地址符  关联变量与指针变量

 

 

#include "stdio.h" 
void main()
{
int a,b;           // 声明变量
int *p1,*p2,*p;   // 声明指针
p1=&a;            // 初始化指针,指针变量p指向变量a
p2=&b;
printf("请输入变量a和变量b\n");
scanf("%d %d",&a,&b);
if(a>b)
{
p=p1;
p1=p2;
p2=p;
}
printf("变量a的值是%d,指针变量p1的值是%d,*p1的值是%d%\n:",a,p1,*p1);
printf("变量b的值是%d,指针变量p2的值是%d,*p2的值是%d\n:",b,p2,*p2);
}

 

 

2.2、使用指针变量

 

 

 

 

 

2.3、指针的运算

  • 指针的赋值
  • 指针的相加
  • 指针的移动
  • 指针与指针的比较
  • 指针与地址的比较
  • p+n,p-n,++p,p++,--p,p--,其中n为整数

指针加上一个或者减去一个整数n,表示p向地址增加或者减小的方向移动n个元素单元,从而得到一个新的地址,使其能访问新地址中的数据,每个数据单元的字节取决于指针的数据类型

三、指针与函数

3.1、指向函数的指针

用指针变量可以指向一个函数,函数在程序编译时被分配一个入口地址,这个函数的入口地址称为函数的指针。

函数指针变量常用的用途之一是把指针作为参数传递到其他函数。指向函数的指针也可以作为参数,以实现函数地址的传递,这样能够在被调用的函数中使用实参函数。

3.2、返回指针的函数

函数可以返回数值型,字符型,布尔型等数据,也可以带回指针型的数据叫做返回指针值的函数

定义形式:

类型名 *函数名(参数表列)

int *max(int *x,int *y)

max函数调用后返回值的数据类型是整型指针

四、void指针类型

void指针类型,可以用来指向一个抽象类型的数据,在将它赋值给另外一个指针变量时要进行强制类型转换,使之适合于被赋值的变量的类型。

 变量转换 一般形式:

  • int *p1;
  • void *p2;
  • 将p2转换int类型  或者    将p1转换位void类型       p1 = (void*) p2    或 p1 = (int *)p2

 

函数转换的一般形式:

void *fun(char ch1,char ch2);    fun函数返回的是一个地址,指向空类型,如果需要引用此地址,需要进行下列转换

p1=(char*)fun(ch1,ch2)

五、简单使用----链表

单链表又称线性链表,用它来表示线性表时,用指针表示空间节点的逻辑关系,单链表的一个存储节点包含数据域(data)和指针域两部分。

data部分用于存储线性表的一个数据元素,link部分用于存放一个指针,用于指示该链表下一个节点的开始存储地址。

链表的第一个节点称为首节点,它的地址可以通过链表的头指针找到,其他节点的地址通过前驱节点的link域找到,链表的最后一个节点没有后继,则在Link域放一个空指针Null,图中用^表示。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旭日初扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值