- 指针:是编程语言中的一个对象,利用地址,它的值直接指向。意思是通过它能找到以它为地址的内存单元。
#include <stdio.h>
int main()
{
int a = 10;//在内存中开辟一块空间
int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。
//将a的地址存放在p变量中,p就是一个之指针变量。
return 0; }
※指针是用来存放地址的,地址是唯一标示一块地址空间的。
※指针的大小在32位平台是4个字节,在64位平台是8个字节。
- 指针+-整数
#include <stdio.h> //演示实例 int main() { int n = 10; char *pc = (char*)&n; int *pi = &n; printf("%p\n", &n); printf("%p\n", pc); printf("%p\n", pc+1);//指针可以加一取下一个地址的元素 printf("%p\n", pi); printf("%p\n", pi+1); return 0; }
指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。 -
野指针:就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的),以下是三种情况:1. 指针未初始化2. 指针越界访问
3. 指针指向的空间释放
- 指针运算
指针+-整数:
#define N_VALUES 5 float values[N_VALUES]; float *vp; //指针+-整数;指针的关系运算 for (vp = &values[0]; vp < &values[N_VALUES];) { *vp++ = 0; }
指针-指针:
int my_strlen(char *s) { char *p = s; while(*p != '\0' ) p++; return p-s; }
※ 允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。 (如最后一个不能与第一个比较,第一个可以和最后一个比较)-
//*ppa 通过对ppa中的地址进行解引用,这样找到的是 pa , *ppa 其实访问的就是 pa . int b = 20; *ppa = &b;//等价于 pa = &b; //**ppa 先通过 *ppa 找到 pa ,然后对 pa 进行解引用操作: *pa ,那找到的是 a . **ppa = 30; //等价于*pa = 30; //等价于a = 30;