编程基础——指针与引用

编程基础——指针
  • 概念:变量的内存地址
  • 定义:变量类型* 指针变量
  • 赋值:
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 = &num;
    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

不能通过在函数中交换两指针,实现交换指针对应数据的功能,因为指针变量的修改无法作用于原指针变量上。但是可以通过引用的方式,实现交换指针交换元素。

发布了16 篇原创文章 · 获赞 0 · 访问量 532

猜你喜欢

转载自blog.csdn.net/clfxyz/article/details/105656302