码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 指针复习

时间:2016-03-29 19:27:42      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

 

最近开始准备实习的笔试,复习了一下C++ 指针的内容

在计算机的每一个字节都有一个对应的地址:

很多书上用街道上的门牌比喻:地址使用数字来表示的,就和街道上的门牌号一样。但这样是不甚贴切的,因为存在着二级指针和一个数据存在多个地址等情况。

所以我觉得用字典前面的目录来比喻比较贴切。

在我们的程序中:

先举一个简单的例子,int *p ; 这里表明我们定义了一个指针,也就是说我们在字典的目录里定义了一条目录,但是它指向的内容(值),指向多少页(存放的地址)都是不确定的。

int *pc ;//定义了一个指针
int   ac;
pc = &c ;//这个时候,指针就指向了a
c= 5;//p指向的a 就存了值 5;

cout << pc <<endl;//0034FE88
cout << &c <<endl;//0034FE88
cout << c <<endl;  //5
cout << *pc <<endl;//5
cout << pc + 1 <<endl;//0034FE8C
*pc = 3;
cout << c <<endl;//3
int *pd;
*pd = 4;//error

可以看到,这时,pc存放着数据c的地址,而*pc代表着c中存放的值,改变了*pc也就意味着改变了变量c的值,值得注意的是,pc+1的值并不是代表着pc地址值+1,而是pc地址值+1*int数据所占字节的值。

但是如果一个指针,不进行初始化的话,是不能够进行赋值的,Run-Time Check Failure #3 - The variable ‘pd‘ is being used without being initialized.

 

#include <iostream>
using namespace std;

int main()
{
int a[]={30,21,12,43,34,75};
char b;
int *p = a;
for(int i = 0 ; i<5 ; i++)
cout << *(p++) <<endl;//3,30,21,12,43
int *q = a;    
cout << q <<endl;//0030F978
cout << q+1 <<endl;//0030F97C
cout << *q <<endl;//30
cout << *q+1 <<endl;//31
cout << *(q+1) <<endl;//21
cout << &a[1] <<endl;//0030F97C
cout << &q <<endl;//0030F930
cin>>b;
return 0 ;
}

可以看出,实际上q就存放着数组a的首地址,而q+1就是a[1]元素的地址,*(q+1)就是a[1].

 

C++ 指针复习

标签:

原文地址:http://www.cnblogs.com/Crazod/p/5333950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!