指针!终于让我领悟到了一丢丢!!太激动了所以赶快写下来!
p :一个变量,如1,2...
&p:取变量p的地址,如0XA0,0Xeff14
*p:定义一个指针
一、利用指针访问对象:
如果指针指向了一个对象,则允许用解引用符(操作符*)来访问对象;
1-简单举例:
2-简单举例:
#include<iostream>
using namespace std;
int main(){
int a=3;
int *p=&a; //p存放着变量a的地址,或者说p是指向变量p的指针
cout<<p<<endl;
cout<<*p; //由符号*得到指针p所指的对象,输出3
return 0;
}
运行结果:
思路:
3-简单举例
为p赋值实际上是为p所指的对象赋值;
#include<iostream>
using namespace std;
int main(){
int a=3;
int *p=&a;
*p=0; //改变p所指对象的值
cout<<p<<endl;
cout<<*p<<endl;
cout<<a;
return 0;
}
运行结果:
4-简单举例:
#include<iostream>
using namespace std;
int main(){
int a=1,b=2;
int *p=&a;
cout<<*p<<endl;
p=&b;
cout<<*p<<endl;
*p=3;
cout<<*p<<endl;
cout<<b;
return 0;
}
运行结果:
5-复杂举例:
#include<iostream>
using namespace std;
void test(int *p1){
*p1=114514;
}
int main(){
int *p1=NULL;
int p=2333;
p1=&p;
printf("*p1=%d,p1=%d,&p1=%d,&(*p1)=%d,p=%d,&p=%d\n",*p1,p1,&p1,&(*p1),p,&p);
test(p1);
printf("*p1=%d,p1=%d,&p1=%d,&(*p1)=%d,p=%d,&p=%d\n",*p1,p1,&p1,&(*p1),p,&p);
getchar();
return 0;
}
运行结果:
思路:
二、指向指针的指针(**):
1-简单举例;
#include<iostream>
using namespace std;
int main()
{
int ival=1024;
int *pi=&ival; //pi指向一个int型的数
int **ppi=π //ppi指向一个int型的指针
cout<<"ival直接输出: "<<ival<<endl;;
cout<<"*pi指针输出: "<<*pi<<endl;
cout<<"**ppi指针输出: "<<**ppi<<endl;
return 0;
}
运行结果:
思路:
三、小点
1.int* p1,p2;
p1是指向int的指针,p2是int类型的变量。
2.void*指针
void指针能存放任意类型对象的地址