指针(变量)就是用来存放地址的(变量)
存放在指针中的值都被当作地址处理
一、指针和指针类型
指针类型决定了指针进行解引用时,能够访问空间的大小。
例:int* p //*p访问4个byte
char* p //*p访问1个byte
double* p //*p访问8个byte
二、指针+整数
指针类型决定,指针走一步,走多远。(步长)
例:int* p //p+1,走4个byte
char* p //p+1,走1个byte
double* p //p+1,走8个byte
#define _CRT_SECURE_NO_WARNINGS 1
//指针加整数
#include <stdio.h>
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;
}
三、野指针
野指针:指针指向的位置是不可知的
1.指针未被初始化
2.指针越界访问
3.指针指向的空间释放
1.指针未被初始化
#define _CRT_SECURE_NO_WARNINGS 1
//指针未初始化
#include <stdio.h>
int main ()
{
int a = 0;//局部变量不初始化,默认是随机值。
int* p;//局部的指针变量不初始化,就被初始化为随机值
*p = 20;//地址随机
return 0;
}
2.指针越界访问
#define _CRT_SECURE_NO_WARNINGS 1
//指针越界
#include <stdio.h>
int main ()
{
int a [10] = {0};
int i = 0;
int* p = a;
for (i = 0; i <= 12; i++)
{
*p++ = i;
}
return 0;
}
3.指针指向的空间释放
#define _CRT_SECURE_NO_WARNINGS 1
//指针指向的空间释放
#include <stdio.h>
int* test ()
{
int a = 10;//局部变量,函数结束,变量就被释放了。
//虽然我的地址保存了,但指针指向的位置已经不可知了,可能电脑已经分配给别变量了。
return &a;
}
int main ()
{
int* p = test();
*p = 20;
return 0;
}
4.如何规避野指针
(1)指针初始化
(2)小心指针越界
(3)指针指向空间释放后,立即置NULL
(4)指针使用之前先检查有效性(指针为空,不能访问。)
标签:初始化,指向,int,十八,访问,初识,byte,指针 From: https://blog.csdn.net/m0_56351488/article/details/144408365