1
2
3
4
5
6
7
8
9
10
11
12
int m,n;
m=100;
int *pm;//定义一个指针变量
pm=&m;//取地址并传递
cout<<pm<<" "<<*pm;//*间接引用运算符

//pm = 0x28fef8
//*pm 访问指针所指向的变量,即m值100

*pm=300;
//间接访问m,改变值

1
2
3
4
5
6
7
int *pm=&n;   //*pm定义指针
*pm=&m; //*pm表示间接引用,*pm相当于n
//错误,一级指针无法做到,相当于将m的地址赋值给n

*pm=m; //将m的值赋值给n

pm=&m; //改变pm指针变量的指向,使pm指针指向m的地址
1
2
3
4
5
6
7
8
9
10
int a[10]={1,2,3,4};
int *p=a;//p起始指向a[0]
for(;p<a+10;p++)//p++会使p=a[0]变为p=a[1]...
{
cout<<*p<<" ";
}

//1 2 3 4 0 0 0 0 0 0


指针访问数组下标法

1
2
3
4
int a[10]={1,2,3,4};
int *p = a;
for(int i=0;i<n;i++)
cout<<p[i]<<endl;

指针访问数组指针法

1
2
3
4
int a[10]={1,2,3,4};
int *p = a;
for(int i=0;i<n;i++,p++)
cout<<*p<<endl;

数组的传参

在c++中,当数组作为函数传参时,实参数组给形参数组传递的是指向数组首元素的指针,而不是数组的副本。

即在函数中改变数组元素会对原数组产生影响。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int display(int m[],int n)
{
for(int i=0;i<n;i++) //不能m++,因为数组名是一个地址,不能给数组赋值运算
cout<<m[i];
for(int i=0;i<n;i++)//改变数组
m[i]=i*3;
}

int main()
{
int a[10]={5,6,7};
display(a,10);
display(a,10);
}

//5 6 7 0 0 0 0 0 0 0
//0 3 6 9 12 15 ...
//

指针在数组中的应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int display(int *m,int n)
{
for(int i=0;i<n;i++)
cout<<*m++;//*m++即*(m++),但是不改变后++的原则,该复合操作符表示先取出m所指向的内存单元中的值,如何将指针m自增加1,指向下一元素。
m=&a[0]; //使m指向a的初始元素
for(int i=0;i<n;i++,m++)//改变数组
*m=i*3;
}

int main()
{
int a[10]={5,6,7};
display(a,10);
display(a,10);
}

//5 6 7 0 0 0 0 0 0 0
//0 3 6 9 12 15 ...
//