简介
在计算机中, 所有的数据都是存放在存储器中的, 不同的数据类型占有的内存空间的大小各不相同。内存是以字节为单位的连续编址空间, 每一个字节单元对应着一个唯一的编号, 这个编号被称为内存单元的地址。比如: int类型占4个字节, char类型占1个字节等。内存为变量分配存储空间的首个字节单元的地址, 称之为该变量的地址。地址用来标识每一个存储单元, 方便用户对存储单元中的数据进行正确的访问。在高级语言中地址形象地称为指针。
地址与指针
指针变量及其定义
指针变量是存放一个变量地址的变量,不同于其他类型变量,它是专门用来存放内存地址的,也称为地址变量。定义指针变量的一般形式为:类型说明符*变量名。
类型说明符表示指针变量所指向变量的数据类型;*表示这是一个指针变量;变量名表示定义的指针变量名,其值是一个地址,例如:char*p1;表示p1是一个指针变量,它的值是某个字符变量的地址。
变量内存的查看:
在地址处输入 &Number ,查看Number 变量的内存地址和存储的值
#include <stdio.h> //指针 // &取地址运算符 // *间接运算符,指针 操作内存地址 int main() { int Number = 11; int *pNum = &Number;//Number的地址0x012FFD#C赋值给指针pNum *pNum = 6;//*表示取后面地址的值,*后面跟的是地址 printf("Number的值和地址是:%d,%x,%x", Number, &Number,pNum); return 0; }
指针的实例应用:
指针直接操控地址改变变量的值
#include <stdio.h> //指针的基本实例 void add(int * a, int * b)//加法函数,传参数为地址 { int temp = *a + *b;//操控地址相加里面的值 *a = temp; } int main() { int x = 5; int y = 6; add(&x, &y);//传递x,y的地址过去 printf("%d",x); return 0; }
指针和数组
#include <stdio.h> //指针数组的基本实例 int main() { int Number[5] = { 0,1,2,3,4 }; int * p = Number;//Number 就是 Number[0]的地址 int * q = p + 1;//地址加1,代表加了一个类型长度,也就是 &Number[0]+1=&Number[1] return 0; }
//Number[0] 和p[0]相等