[关闭]
@Arbalest-Laevatain 2018-05-14T16:02:25.000000Z 字数 680 阅读 582

指针的基本知识与常见错误

C语言 C++


指针变量的定义

  1. float* pointer_1;
  2. int* pointer_2;

基类型* 变量名

指针的意义在于间接访问数据

指针的初始化

  1. int a;
  2. int*p=&a;

指针变量的赋值

  1. int* p,a=123;
  2. p=&a;
  3. //或
  4. int* p;
  5. int a=123;
  6. p=&a;

使用指针常犯的错误总结:

错误一:

  1. int* p,a=123;
  2. *p=a;

结果:
Error C4700 uninitialized local variable 'p' used C语言

错因:
由于指针变量p没有初始化,很可能是指向了系统中某一具有功能的内存地址,此时再对其赋值很有可能会造成致命错误

错误二:

  1. int *p=NULL;
  2. int a;
  3. p=&a;
  4. printf("%d\n",*p);

结果:
没有任何输出

错因:
由于把指针变量初始化为符号常量NULL,也就是0。内存地址初始化为0,实际上运行时编译器并没有给指针p分配内存空间,所以p是无法对任何数据内存地址进行访问。故没有任何返回值。

错误三:

在函数定义中的错误

  1. //定义一个交换两个变量的函数
  2. void swap(int*p1,int*p2)
  3. {
  4. int*temp=p1;
  5. p1=p2;
  6. p2=temp;
  7. }

结果:
函数并没有发挥作用,没有交换两个数

错因:
因为swap函数中只是对形参指针的值进行操作,由于形参的值无法传回实参,所以无意义。正确的写法应该是:

  1. void swap(int*p1, int*p2)
  2. {
  3. int temp = *p1;
  4. *p1 = *p2;
  5. *p2 = temp;
  6. }

合理使用空指针来防止出现bug

其实是在指针做完某件事后,暂时把NULL复制给它,可以防止出现“野指针”

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注