先要知道几句话
int *p
;//p是变量名,类型是int *p=&i
;//i的地址赋值给p,p指向了i
//修改p的值不影响i 的值,修改i的值不影响p的值
//*p
就是 i 有的地方*p
可以和i
互换
注意顺序:
1先有 int *p;
2先有 int i=10;
3 p和i产生了关系 即 p=&i;
4 结果是 *p=i;
指针与结构体的使用,点击这里数据结构 链表 结构体与指针与typedef
下面是代码
例子1
#include <iostream>
using namespace std;
int main()
{
int *p;//p是变量名,类型是int *
int i=10;
p=&i;//i的地址赋值给p,p指向了i
//修改p的值不影响i 的值,修改i的值不影响p的值
//*p就i 有的地方*p可以和i互换
cout<<"i:"<<i<<endl;
cout<<"*p:"<<*p<<endl;
return 0;
}
结果
可以看出 i 确实和*p一样了
例子2
#include<iostream>
using namespace std;
int main()
{
/*注意顺序:1先有int *p; 2int i=10;
3 p和i产生了关系 即 p=&i;
4 结果是 *p=i;
*/
int * p; //变量名是p,类型是int*
int i=10;//定义i,赋值
int j=100;//定义j,
p=&i;//i的地址赋值给p,p指向了i 注意p在左边 、*p 就是 I
//修改p的值不影响i的值,修改i的值不影响p的值
// *p 就是i 是一样的可以互换, *p=i
j=*p;//即 j=i
cout<<"j:"<<j<<endl;
cout<<"i:"<<i<<endl;
cout<<"*p:"<<*p<<endl;
return 0;
}
结果
例子3 函数调用时的指针
#include <iostream>
using namespace std;
f(int * p)//相当于 p=&i; p获得i的地址但修改i的值不影响p的值,互不影响
{
*p=99; //结果是*p=i,用的是 *p
cout<<"*p:"<<*p<<endl;
}
int main()
{
int i=0; //1先定义i初始化
f(&i);//2调用函数f,i的地址赋值给p ,传递上去
cout<<"i:"<<i<<endl;
// cout<<"*p:"<<*p<<endl;
return 0;
}
结果
例子4,从键盘输入i,再输出
#include <iostream>
using namespace std;
f(int * p)//相当于 p=&i; p获得i的地址但修改i的值不影响p的值,互不影响
{
*p=99; //结果是*p=i,用的是 *p
cout<<"*p:"<<*p<<endl;
}
int main()
{
int i=0; //1先定义i初始化
cout<<"输入i:"<<endl;
cin>>i;
f(&i);//2调用函数f,i的地址赋值给p ,传递上去
cout<<"i:"<<i<<endl;
// cout<<"*p:"<<*p<<endl;
return 0;
}
结果
可以看出修改 i 的值不影响p的值
例子5 改变i和p的值
#include <iostream>
using namespace std;
f(int * p)//相当于 p=&i; p获得i的地址但修改i的值不影响p的值,互不影响
{
*p=0; //结果是*p=i,用的是 *p
cout<<"输入*p:";
cin>>*p;
cout<<"*p:"<<*p<<endl;
}
int main()
{
int i=0; //1先定义i初始化
cout<<"输入i:"<<endl;
cin>>i;
f(&i);//2调用函数f,i的地址赋值给p ,传递上去
cout<<"i:"<<i<<endl;
// cout<<"*p:"<<*p<<endl;
return 0;
}
结果
可以看到,修改i的值,p不改变,修改p的值i不改变
重点是最前面的那几句话
感谢郝斌老师!!!