C++指针易错点梳理

1 指针定义

指针是一个变量;指针的值是另一个变量的地址。变量的声明

type *var-name;

var-name 是指针变量的名称。星号是用来指定一个变量var-name是指针变量。

int    *ip;    /* 变量ip是一个整型的指针 */
#include <iostream>

using namespace std;

int main ()
{
int var = ; // 实际变量的声明
int *ip; // 指针变量的声明 ip = &var; // 在指针变量中存储 var 的地址 cout << "Value of var variable: ";
cout << var << endl; // 输出在指针变量中存储的地址
cout << "Address stored in ip variable: ";
cout << ip << endl; // 访问指针中地址的值
cout << "Value of *ip variable: ";
cout << *ip << endl; return ;
}
Value of var variable:
Address stored in ip variable: 0xbfc601ac
Value of *ip variable:

2 实例辨析

double dval;
double *pd = &dval; ##正确。声明同时初始化
double *pd2 = pd; ##正确。pd指针存放的是dval的地址 int *pd3 = pd; ##错误。pd3的类型和pd类型不符

3 解引用赋值和指针赋值

星号*有两种不同含义:

(1)解引用符

(2)声明变量p是指针

 ##
 int num = ;
int *p = &num;
printf("数值%d所在的地址是 %p\n", num, p);
printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, *p);
*p = ; ##这里的*是是解引用操作符,对*p赋值(对左值赋值),从而改变p所指的地址上所保存的值,从而改变此地址所存储的变量num的值。(上面num的值变为100)
printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, num);    
    int num = , another = -;
int *p = &num;
p = &another;
printf("%d\n", *p);//此时p指向了another,所以输出了another的值,即-5

关键概念:

像&和*这种符号,既能做表达式里面的运算符,又能做声明的一部分。需要根据上下文区分。

上一篇:JavaScript –type


下一篇:.net学习之Session、Cookie、手写Ajax代码以及请求流程