指针复习
其实这篇文章曾经在初赛复习里。。。。
定义:int * a = 地址;(int &a = 变量值)
调用:a 表示 地址,* a 表示地址所对应的值。
改变:a++ 等价于 a += sizeof(a 对应的变量的大小,如int就是4个字节)
优先级:
-
指针中,地址的优先级大于值的优先级。 * a++ 等价于 *(a++),如果想要使 a 指向的值++,需要加括号:(*a)++
-
上面的 ( * a++) 如果输出的话,还只是输出之前的 (* a),因为指针中++的用法和普通变量是一样的,a++ 表示先操作再加,++a 表示先加再操作。如:
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
int *p=a;
cout<<*p<<endl;//输出a[0]
cout<<*p++<<endl;//输出a[0]
cout<<*p;//输出a[1]
return 0;
}
代码中输出 * p++时是先输出 * p,再让指针p的地址++
而
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
int *p=a;
cout<<*p<<endl;//输出a[0]
cout<<*++p<<endl;//输出a[1]
cout<<*p;//输出a[1]
return 0;
}
输出 * ++p时是先让p的地址++,再输出当前地址所对应的值。
但是 += 在指针中和 ++ 不一样,指针 += 就是值加,不是地址加。
函数:
- swap:swap函数实际上是在交换两个地址所对应的值,动用了swap函数后,所指向那两个地址的指针的值也要相应的改变,处在那两个地址上的数组的值也要改变。
. . . . . .
添加一道指针题:
程序阅读:
#include<iostream>
using namespace std;
int a,b,c;
int* cal(int *p,int &q,int r){
q+=r;
*p+=q;
return p;
}
int main(){
cin>>a>>b>>c;
c=*cal(&a,b,c);
cout<<a<<" "<<b<<" "<<c;
}
这道题让我第一次知道函数是可以当指针用的。。。
b传进去的是地址,里面的值会发生变化,这个比较简单。
*p+=q 中是 p 所指向的值加上 q 。
这些知道了就很简单了。