指针:指针就是保存的是另一个对象的地址
string s("hello world");
string *sp=&s; //sp holds the address of s;
指针都有一个与之相关联的数据类型,该数据类型决定了指针所指向对象的类型
1,vector<int> *pvec;
int * p1,*p2;
string *pstring;
double * dp;
2,一个有效的指针必然是以下三种状态质疑:保存一个特定的对象的地址;指向某个对象后面的另一个对象;或者是0值,,弱指针保存的是0值,表明不知向任何一个对象,未初始化的指针是无效的。知道给该指针赋值才能对他使用。
指向某个对象后面的另一个对象这句话不懂啊。
3,避免使用未初始化的指针。
指针赋值只有四中类型
(1)0 值表达式
累心匹配的对象的地址
另一对象之后的下一地址
同类型的另一个有效地指针。
把int型变量赋给指针是非法的。
int *pi=NULL ;等效于int * pi=0;
指针操作
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int s1=123;
int *sp1=&s1;
int s2=456;
int *sp2=&s2;
cout<< *sp1 <<endl;//123
cout<<"************"<<endl;
*sp1=789;
cout<< *sp1<<endl;//789
cout<<"** **********"<<endl;
sp1=sp2;
cout<< *sp1 <<endl;//456
cout<<"************"<<endl;
return 0;
}
指针和数组
在表达式忠,名字会自动转换为指向宿主第一个原素的指针。如
int ia[]={1,2,3,4,5,6,7,8};
int *p=ia;//这个时候指针ip指向了ia[0]
int ia[]={1,2,3,4,5,67,9};
int *p=ia;
cout<<*p<<endl; //1
cout<<"************"<<endl;
p=p+1;
cout<<*p<<endl;///2
cout<<"************"<<endl;
再来一段程序
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const size_t size=5;
int arr[size]={0,1,2,3,4};
for(int *p1=arr,*p2=arr+size;p1<p2;p1++)
cout<<*p1<< ' ';
return 0;
}