#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
**/