编程基础——指针
- 概念:变量的内存地址
- 定义:变量类型* 指针变量
- 赋值:
int num=1;
int* p1 = # //&取地址
char str='a';
char* p2 = &str;
其中,int*与char*是指针变量类型,*是类型的一部分,
类似于整型为int字符型为char
在写作过程中,允许写成int *p, char *p1;
- 访问元素:
p保存的是地址,*p是此地址中存放的元素
#include<cstdio>
int main(){
int num=123;
int* p = #
printf("%d", *p); //输出123
return 0;
}
- 指针自增与自减
对int*型指针变量p来说,p+1是p所指int型变量的下一个int型变量地址
#include<cstdio>
int main(){
char str[3]="ab"; //str[3]存放\0,表示字符串结尾
char* p = str; //指针p初始化为字符数组首地址str[0]
for(int i=0;i<2;i++){
printf("%c", *(p+i)); //通过p加数i的不断提高,依次访问下一个元素
}
return 0;
}
输出:ab
- 指针与数组
数组名称可以作为数组的首地址使用,即int a[10]中,a=&a[0]
两个int型指针相减,等价于求两个指针之间相差几个int
#include<cstdio>
int main(){
int a[4]={1,2,3,4};
int* p = a;
int* q = &a[3];
printf("%d", q-p);
return 0;
}
输出:3
- 指针变量作为函数参数
指针类型作为函数参数,视为把变量的地址传入函数,如果在函数中对此地址中的元素进行改变,那么原数据也会被改变
//通过交换两个指针对应的值实现交换数据
#include<cstdio>
void change(int* a, int* b){
int temp = *a;
*a = *b;
*b = temp;
}
int main(){
int num1=1,num2=2;
int* p = &num1;
int* q = &num2;
change(p,q);
printf("%d %d", num1,num2);
return 0;
}
输出:2 1
指针与引用
- 引用的作用:给变量取别名,对引用变量(新名)的操作就是对原变量的操作
- 方法:函数的参数类型后面加“&”
- 注意:引用不是取地址
//指针的引用,通过交换两指针实现交换两个数
#include<cstdio>
void change(int* &a, int* &b){
int* temp = a;
a = b;
b = temp;
}
int main(){
int num1=1,num2=2;
int* p = &num1;
int* q = &num2;
change(p,q);
printf("%d %d", *p,*q);
return 0;
}
输出:2 1
不能通过在函数中交换两指针,实现交换指针对应数据的功能,因为指针变量的修改无法作用于原指针变量上。但是可以通过引用的方式,实现交换指针交换元素。