指针:
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
#include <stdio.h>
int main()
{
int a = 10; //在内存中开辟一块空间
int *p = &a; //这里我们对变量a,取出它的地址,可以使用&操作符。
//将a的地址存放在p变量中,p就是一个之指针变量。
return 0;
}
★指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。
指针的存在:
指针是存放地址才出现的,地址是为了标示一块地址空间的。
指针让地址有地方存放,指针让内存的访问更加方便。
指针的大小在32位平台是4个字节,在64位平台是8个
指针的初始化:
char *pc = NULL;
int *pi = NULL;
short *ps = NULL;
char* 类型的指针是为了存放 char 类型变量的地址。short* 类型的指针是为了存放 short 类型变量的地址。
int* 类型的指针是为了存放 int 类型变量的地址。
指针操作:
指针+指针的类型决定了它移动时的步距
指针- 指针:只有两个指针指向同一个数组时才能指针相减,值为两个指针下标只差
int n = 10;
int *p = &n;
printf("%p\n", p);
p++; //指针++,是指向下一个整形
printf("%p\n", p);
((int)p)++; //p也是变量,强转成整形后++,是给p变量+1;
printf("%p\n", p);
指针的解引用
指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。
比如:char*的指针解引用就只能访问一个字节,而int*的指针的解引用就能访问四个字节。
★标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比
较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。