您的位置:首页 > 编程语言 > C语言/C++

C/C++指针详解

2011-10-10 17:29 253 查看
#include <iostream>
using namespace std;
int main(void)
{
int a = 10;//定义一个变量a,赋值为10
int *ap =&a; //将a的地址给指针ap;"&"--取地址的符号;
cout<<"a= "<<a<<"; *ap ="<<*ap<<endl;//输出指针ap地址里的内容
(*ap) = 100;
cout<<"a= "<<a<<"; *ap ="<<*ap<<endl;//输出指针ap地址里的内容
cout<<"ap= &a ="<<ap<<" ="<<&a<<endl;//ap 与 &a 是同一地址
/**
*此时的指针ap地址就是变量a的地址,ap所指向的地址里的内容就是a的值;
*改变指针ap地址里的内容就是在改变a的值。
*/

int b =100; //定义一个变量a,赋值为10
int *bp = (int*)malloc(sizeof(int));//为指针bp分配内存
*bp = b; //只是把b的值赋给了指针bp所指地址里的内容
cout<<"b= "<<b<<"; *bp ="<<*bp<<endl;//Notice:值相同,地址不同
cout<<"bp!= &b; "<<"bp = "<<bp<<";&b = "<<&b<<endl;
(*bp) = 1000; //改变指针bp所指地址里的内容;它的改变与b无关
cout<<"b= "<<b<<"; *bp ="<<*bp<<endl;
cout<<"bp!= &b; "<<"bp = "<<bp<<";&b = "<<&b<<endl;
/**
*这样一来(通过动态内存分配),指针具有一般变量与指针的双重功能;
*总之,指针的功能显得很强大。
*/

///下面的就不合法了,你可以试试运行一下(肯定是错误的)
// int c = 1000;
// int *cp;
// *cp = c;//无法赋值,因为指针cp没有指向明确的地址
//cout<<*cp;//无法输出

return 0;
}

应用举例:
包含C++方面的一些知识。
#include <iostream>

using namespace std;

#include <string>

#include <cstdlib>

class Person

{

protected:

string Name;

public:

Person(string Name = "\0")

{

this->Name = Name;

}

virtual void Print()

{

cout<<"Person "<<Name<<endl;

}

};

class Student : public Person

{

protected:

int Number;

public:

Student(int Number = 0,string Name = "\0"):Person(Name)

{

this->Number = Number;

}

virtual void Print()

{

cout<<"Student "<<Name<<' '<<Number<<endl;

}

};

class Teacher : public Person

{

protected:

int Year;

public:

Teacher(int Year = 0,string Name = "\0"):Person(Name)

{

this->Year = Year;

}

virtual void Print()

{

cout<<"Teacher "<<Name<<' '<<Year<<endl;

}

};

class Graduate : public Student

{

protected:

string Research;

public:

Graduate(string Research = "\0",string Name = "\0",int Number = 0)

:Student(Number,Name)

{

this->Research = Research;

}

void Print()

{

cout<<"Graduate "<<Name<<' '<<Number<<' '<<Research<<endl;

}

};

int _main_Person_virtual_function()

{

int length;

cin>>length;

Person* *p = new Person*[length];

for(int i = 0; i < length; ++i)

{

string obj_Name;

string Name,Research;

int Number,Year;

cin>>obj_Name;

if(obj_Name == "Person")

{

cin>>Name;

p[i] = new Person(Name);

}

else if(obj_Name == "Student")

{

cin>>Name>>Number;

p[i] = new Student(Number,Name);

}

else if(obj_Name == "Teacher")

{

cin>>Name>>Year;

p[i] = new Teacher(Year,Name);

}

else if(obj_Name == "Graduate")

{

cin>>Name>>Number>>Research;

p[i] = new Graduate(Research,Name,Number);

}

else

{

exit(EXIT_FAILURE);

}

}

while(true)

{

string strTemp;

cin>>strTemp;

if(strTemp == "exit")

break;

int index = atoi(strTemp.c_str());

if(index < 0 || index >= length)

break;

p[index]->Print();

}

for(int i = 0; i < length; ++i)

delete p[i];

delete p;

return 0;

}

/**

4

Person Zhang

Student Zhao 200905

Graduate Li 200905 DataMining

Teacher Luo 10

**/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: