上课笔记
一、指针是什么
1、指针是内存中最小单元编号,就是地址
2、平时口中说的指针,通常是指指针变量,是用来存放内存地址的变量
总结:指针就是地址,口语中说的指针是指针变量
#include<stdio.h>
int main()
{
int a =10; //在内存开辟一片空间
int *p =&a; //对a变量取出他的地址,用操作符&
//a变量占用4个字节的空间,这里是将a的4个字节中的第一个子杰的地址存放p变量中,p就是一个指针变量
return 0;
}
指针是用来存放地址的,地址是唯一标示一块地址空间的
指针大小:在32位平台是4字节,在64位平台是8字节
二、指针和指针类型
变量有不同的类型,整形,浮点型等。指针也是有类型的。
int num =10;
p = &num
要把&num保存道p中,p是一个指针变量,那他应该有类型
char *pc =NULL;
int *pi =NULL;
short *ps =NULL;
long *pl =NULL;
flong *pf =NULL;
double *pd =NULL;
到这里我们可以看到,指针的定义方式是:type + *。
char*类型的指针是为了存放char类型变量的地址
short*类型的指针是为了存放short类型变量的地址
int*类型的指针是为了存放int类型变量的地址
2.1指针加减整数
#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;
}
指针类型决定了指针向前一步或者向后一部有多大
2.2指针的解引用
#include<stdio.H>
int main()
{
int n = 0x11223344;
char *pc =(char *)&n;
int *pi = &n;
*pc = 0; //需要在调试过程中观看内存变化
*pi = 0;
return 0;
}
指针类型决定了,对指针解引用的时候有多大权限,例如,char*的指针解引用只能访问一个字节,而int*的指针的解引用可以访问4个字节。