「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。
指针:
指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑储存器中另一个地方的值,由于通过地址能找到所需的变量单元,地址指向该变量单元,因此将地址形象化的称为“指针”,意思是通过他能找到以他为地址的内存单元。描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。
int main()
{
int a = 10;
int* p = &a;//指针变量
return 0;
}
注:指针就是变量,用来存放地址的变量(存储在指针内的值都当成地址处理)
指针和指针类型
指针类型决定指针进行解引用操作的时候,可以访问空间的大小以及对指针解引用的时候有多大的权限(能操作几个字节)
int p: p可以访问四个字节
char p:p可以访问一个字节
double p :p可以访问八个字节
指针的意义
指针+-整数
int main()
{
int a = 0x11223344;
int* pa = &a;
char* pc = &a;
printf("%p\n", pa);
printf("%p\n", pa+1);
printf("%p\n", pc);
printf("%p\n", pc+1);
return 0;
}
int p:p+1 ——> 4*
char p; p+1——> 1*
double*p: p+1——>8
sum: 指针类型决定了:指针走一步走多远(指针的步长)(距离)
野指针
概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)
1.指针未初始化
int main()
{
//int a;//局部变量不初始化,默认是随机值
int* p;//局部的指针变量,就被初始化随机值
return 0;
}
2.指针越界访问
int main()
{
int arr[10] = { 0 };
int* p = arr;
int i = 0;
for (i = 0; i < 12; i++)
{
p++;
}
return 0;
}
当指针指向的范围超过数组arr的范围时,p就是野指针
3.指针指向的空间释放
test()
{
int a = 10;//局部变量a
return &a;
}
int main()
{
int* p = test();
*p = 20;
return 0;
}