指针,野指针,空指针,赋值?
2016-09-25 07:32
246 查看
bug中最可怕的是野指针,那么问题来了,野指针是什么?是如何产生的?为什么程序员会“忘记”?
昨天调试时,我发现了一个野指针,由此我明白了。
a的值成了乱码,而且gcc编译器并没有报错,那么请看下面的代码
#include <stdio.h>
int fun(int *a)
{
int i;
这时a的值变为正常乱码消失了
那么我们假设a是指针,一旦我们如同该代码一般不让a指向元素的话,编译器
必然是会报错的,那么我们不如假设int a就是指针,那么a=0就是指针指向空
地址的操作,也就是说int a就是在定义一个指针,a=0就是指针在指向0地址
a++就是指针由0地址指向1地址。如果这样来说的话,那么一切也都能说的通
了。int a其实就是在定义一个指针,赋值是指针在指向一个地址。
如此看来的话,c语言就是类型和指针两样东西在操作。
于是,bug的产生也就顺理成章了
当然,这只是我个人的一些想法,如有不对的地方请大家指正。
昨天调试时,我发现了一个野指针,由此我明白了。
a的值成了乱码,而且gcc编译器并没有报错,那么请看下面的代码
#include <stdio.h>
int fun(int *a)
{
int i;
*a=0;//添加的代码 for(i=0;i<10;i++) (*a)++; return 0; } int main() { int a,c; c=fun(&a); printf("c=%d,a=%d",c,a); }
这时a的值变为正常乱码消失了
那么我们假设a是指针,一旦我们如同该代码一般不让a指向元素的话,编译器
必然是会报错的,那么我们不如假设int a就是指针,那么a=0就是指针指向空
地址的操作,也就是说int a就是在定义一个指针,a=0就是指针在指向0地址
a++就是指针由0地址指向1地址。如果这样来说的话,那么一切也都能说的通
了。int a其实就是在定义一个指针,赋值是指针在指向一个地址。
如此看来的话,c语言就是类型和指针两样东西在操作。
于是,bug的产生也就顺理成章了
当然,这只是我个人的一些想法,如有不对的地方请大家指正。
相关文章推荐
- c语言指针的初始化和赋值
- 指针的赋值
- 指针赋值 int a[5]={.... ...}, a 、&a[0]、 &a三者之间的区别 浅析 C/C++求职面试必备考点(五)
- 指针赋值的问题
- 3 定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组。如果相同
- 结构体中指针赋值问题的分析及C代码示例
- C语言指针赋值
- 知道指针地址 , 怎么取出指针指向的内容??? 0x7fff5fbff564 这种值 怎么赋值给一个变量??
- C++ 指针的两种操作,通过指针赋值 & 对指针赋值
- c语言中const 类型变量地址赋值给指针。
- 指针二维二维数组和二重指针 的疑问 二维数组名为什么不能直接赋值给二重指针
- C++ 基类指针和子类指针相互赋值
- 指针的初始化和赋值
- 鸡啄米:C++编程入门系列之二十八(数组、指针和字符串:指针的赋值和指针运算)
- C++ 指针悬挂和赋值操作符的重载,拷贝构造函数实现
- C和指针 第十二章 结构体 整体赋值 error: expected expression
- const修饰的双重指针赋值解惑
- c中给字符数组,字符串指针赋值的方法总结
- 指针指向空字符串和指针赋值为NULL的区别
- 空指针赋值分区