赞
踩
指针的一些基础知识
1、指针的定义
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。
对于普通变量,在内存中需要通过占用内存的某个地址的。因此指针可以通过这个内存地址去找到这个变量。
假设定义一个char a = ‘K’;,该a变量在内存地址0x110下存储了字符’K’。我们如何通过指针来找到字符a所对应的值呢?
可以通过指针变量char *p; p=&a;也就是说我们先定义一个char类型的指针p,我们通过把a的地址0x110赋值给了p,注意指针变量需要的是一个地址,通过&可以取变量a的地址。指针变量p本身也是有一个内存地址的,假设为0x200,那么在内存地址0x200下存储了变量a的地址0x110,我们通过 *p就可以取出0x110内存地址下所对应的值了。
在指针定义时的*
是指针的定义格式,给指针变量赋值时不需要带 *
,定义完后对指针进行*
操作就是取指针存储的地址下所对应的内容。
//定义普通变量
float a = 99.5, b = 10.6;
char c = '@', d = '#';
//定义指针变量
float *p1 = &a;
char *p2 = &c;
//修改指针变量的值
p1 = &b;
p2 = &d;
*
是一个特殊符号,表明一个变量是指针变量,定义 p1、p2 时必须带*
。而给 p1、p2 赋值时,因为已经知道了它是一个指针变量,就没必要多此一举再带上*
,后边可以像使用普通变量一样来使用指针变量。也就是说,定义指针变量时必须带*
,给指针变量赋值时不能带*
。
假设变量 a、b、c、d 的地址分别为 0X1000、0X1004、0X2000、0X2004,下面的示意图很好地反映了 p1、p2 指向的变化:
2、如何通过指针变量取得数据
指针变量存储的时数据的地址,通过指针变量就能获得该地址上的数据。就是*
符号,对指针进行操作。
#include <stdio.h>
int main(){
int a = 100, b = 999, temp;
int *pa = &a, *pb = &b;//在定义时就把变量的地址赋值给了指针
printf("a=%d, b=%d\n", a, b);
/*****开始交换*****/
temp = *pa; //将a的值先保存起来
*pa = *pb; //将b的值交给a
*pb = temp; //再将保存起来的a的值交给b
/*****结束交换*****/
printf("a=%d, b=%d\n", a, b);
return 0;
}
输出的结果
a=100, b=999
a=999, b=100
3、关于*和&
假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a
和&*pa
分别是什么意思呢?
*&a
:&a是取了变量a的地址也就是指针pa,*&a
就是取该地址下的数据也就是*pa
,也就是变量a所对应的数据。*&a=a
&*pa
:*pa
就是取变量a,&*pa
就是取变量a的地址,也就是指针变量pa。&*pa=pa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。