C++指针(2012.06.26&06.27)

来源:互联网 发布:access数据库编程 编辑:程序博客网 时间:2024/05/17 21:45
当你对一件事情的理解越来越深,变化就势在必行——姬十三。
1.指针
指针是用来保存内存地址的变量。指针只能用来存储与它变量类型相同的指针。
几个为什么!
为什么使用指针?(1)快速处理堆中存放的大型数据;(2)快速访问类的成员数据和函数;(3)以别名的方式向函数传递参数。(囧,目前为止一个都没用过呢。)
为什么要对指针进行初始化?因为如果不初始化,那么该指针就是一个失控指针,它可以指向任何地址。并且对该地址的值进行修改和删除。
拓展:变量提供了程序可以操作的有名字的存储区。C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值得取值范围以及可应用在该变量上的操作集。C++程序员常常把变量成为“变量”或“对象(object)”——摘自《C++primer中文版 第四版》
左值和右值的概念
(1)左值(lvalue):可以出现在赋值语句的左边或右边
(2)右值(rvalue):只能出现在赋值语句的右边
回到正题上来,我们先来总结一下(& 和 *)都有哪些用法(以下方程序为例):
&:(1)&s中的&符号是取地址(adress-of)操作符;(2)&引用操作符,不过只能出现等号左边。
*:(1)string *sp;*表明sp是一个指针变量;(2)cout<<*sp;此处的*表示的是解引用运算符。作用就是读取放于内存sp处的数值。
**:指向指针的指针.
(容易混淆的概念:指针地址,指针保存的地址和该地址的值)
诡异问题:
#include <stdio.h>#include <iostream>#include <string>using namespace std;int main(){string s("hello world");string *sp=&s;// sp holds the adress of sstd::cout<<*sp<<endl;return 0;}
如果写作#include<string.h>就不行。百度了一下,是这样解释的,
#include <string.h>这是C语言字符数组的操作函数,不是C++ 的string类