指针复习

其实这篇文章曾经在初赛复习里。。。。

定义: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 。

这些知道了就很简单了。

原文地址:https://www.cnblogs.com/tangzhiyang/p/11804645.html