重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.指针式内存中一个最小单元的编号,也就是地址
2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量
3.指针的大小在32位平台是4个字节;在64位平台是8个字节
总结:指针就是地址,口语中说的指针通常指的是指针变量。
接下来我们说一下指针的类型
我们都知道,变量有不同的类型:整型,浮点型等。那指针有没有类型呢?
准确的说:有的。
我们都知道一个int类型占用4个字节,而一个char类型占用1一字节,指针的类型就决定了指针向前或向后的距离(也就是走一步的大小)。
在这里我们可以从内存中清晰的看到,地址变化的大小,这就是指针类型的意义之一。
上边说了指针其实就是变量的地址,而指针的解引用操作就是找到指针所指的这个变量,对其进行重新赋值等操作。
在这个图中我们可以看到,int类型的指针可以正常的把值修改成我们想要的结果;而char类型却不行(在这里,因为char是一个字节,所以在内存中只能一个字节一个字节的修改我们变量,而我们的arr2数组却是int类型,四个字节位一组,所以其只能修改10个字节的内存,结果也就不是我们想要的了),这就是指针类型的另一个意义。
总结:
指针的类型决定了,对指针进行解引用操作时,有多大的权限(能操作几个字节)。
概念:野指针就是指针指向的位置是不可知的,随机的
3.1指针的成因 1.指针未初始化int main()
{int a = 10;
int* p;
*p = &a;
return 0;
}
大多数编程小白经常会这样写代码,其实这个代码是有问题的,其问题在于,一开始未进行初始化,所以指针所指向的内存就是未知的,后续进行的赋值操作,也就未知的内存中进行修改,这可能导致程序奔溃。所以,我们要尽可能避开这种写法。
这里推荐一种写法:
int main()
{int a = 10;
int* p = NULL;
//NULL - 相当于\0
*p = &a;
return 0;
}
2.指针越界访问
在这里我们就能看见,指针解引用操作已超过数组的大小,在编译器中会报错的,并且我们也不知道后续的指针知道了那儿里。
这里放在后续的时候讲解,这里就简单提示一下。
3.2如何规避野指针int main()
{int* p = NULL;
//....
int a = 10;
p = &a;
if (p != NULL)//检查指针有效性
{*p = 20;
}
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧