//===================================================== // Name : Pointer1.cpp // Author : lf // Version : 《C++语言基础教程》 吕凤翥 P35——P37 2.5.1 // Description : 指针 // Tips : // int *P ---------> p是一个指向int型变量的指针 // char *c---------> c是一个指向char型变量的指针 // char (*pa)[3]---> pa是一个指向char型字符数组的指针 // int (*pf)()-----> pf是一个指向函数的指针,该方法的输入参数为空,返回值是int // int * *pp-------> pp是一个指向指针的指针,即二级指针 //===================================================== #include <iostream> using namespace std; int main() { cout << "<----变量,数组元素,结构成员等地址值都表示为变量名前面加运算符&---->" << endl; int a=5; int b[5]={1,2,3,4,5}; //取整型变量的地址值 int *p1=&a; cout <<"取出指针里面保存的地址的方式:p1="<<p1<<endl; cout <<"取出指针里面保存的地址所表示的值的方式:*p1="<<*p1<<endl; //取数组中某个值的地址值,如此处: //取出数据b中下标为3的值的地址 int *p2=&b[3]; cout <<"p1="<<p1<<",p2="<<p2<<endl; cout<<"--------------------------"<<endl; cout<<"<----数组的地址用数组名表示---->"<<endl; int c[2]={1,2}; int *p3=c; cout <<"p3="<<p3<<endl; cout<<"--------------------------"<<endl; cout<<"<----C++规定:任何数组的数组名都是一个常量指针,其值是该数组首元素的地址值---->"<<endl; cout<<"<----在以下示例中:d是一个二维数组两行三列.p4是一个指向一维数组的指针,它所指向的是有3个元素的一维数组.---->"<<endl; cout<<"<----将d赋值给p4是让p4指向二维数组的第0行.二维数组的第0行就是该二维数组的首元素---->"<<endl; cout<<"<----同理p5指向e的第一个元素---->"<<endl; int d[2][3]; int (*p4)[3]; p4=d; int e[3]={2,3,4}; int *p5=e; cout <<"p4="<<p4<<",p5="<<p5<<endl; cout<<"--------------------------"<<endl; cout<<"<----函数的地址值可以用函数名来表示---->"<<endl; cout<<"<----即一个指向函数的指针可用它所指向的函数名来赋值---->"<<endl; cout<<"<----在以下示例中:p6是一个指向函数的指针.所指向的函数输入参数为double,输出结果亦为double---->"<<endl; cout<<"<----在这里sin给p6赋值,实际上是让p6指针指向sin函数在内存中的入口地址---->"<<endl; double sin (double x); double (*p6) (double); p6=sin; cout <<"p6="<<p6<<endl; return 0; } double sin (double x){ return 0.0; }