【算法笔记】Day04 | 2.7指针

2.7.1 指针的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//2_7_1
#include<stdio.h>
int main(){
    int a=1;
    printf("%d,%d\n",&a,a);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

2.7.2 指针变量

A.指针变量的定义-- *

a1.单个定义

在这里插入图片描述

a2.多个同种类型同时定义

在这里插入图片描述

B.给指针变量赋值–&

在这里插入图片描述

C.指针变量所指地址的内容 — *p

c1.得到该内容

在这里插入图片描述

//2_7_2
#include<stdio.h>
int main(){
    int a;
    int* p=&a;
    a=233;
    printf("%d\n",*p);
    return 0;
}

在这里插入图片描述

c2.操作该内容

在这里插入图片描述

//2_7_3
#include<stdio.h>
int main()
{
    int a=0;
    int* p=&a;
    *p=233;
    printf("%d, %d\n",*p,a);
    return 0;
}

在这里插入图片描述

D.指针变量 “加减法”

在这里插入图片描述

E.指针变量的基类型

在这里插入图片描述

2.7.3 指针与数组

A.数组名作为数组首地址使用

在这里插入图片描述

//2_7_4
#include<stdio.h>
int main()
{
    int a[10]={1};
    int* p=a;
    printf("%d\n",*p);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

B.数组名/指针变量访问数组元素

在这里插入图片描述

//2_7_5
#include<stdio.h>
int main()
{
    int a[10];
    for(int i=0;i<10;i++){
        scanf("%d",a+i);
    }
    for(int i=0;i<10;i++){
        printf("%d",*(a+i));
    }
        return 0;
}

在这里插入图片描述

枚举

在这里插入图片描述

//2_7_6
#include<stdio.h>
int main(){
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    for(int* p=a;p<a+10;p++){
        printf("%d ",*p);
    }
    return 0;
}

在这里插入图片描述

C.指针减法(地址间隔)

//2_7_7
#include<stdio.h>
int main(){
    int a[10]={1,4,9,16,25,36,49};
    int* p=a;
    int* q=&a[5];
    printf("q=%d\n",q);
    printf("p=%d\n",p);
    printf("q-p=%d\n",q-p);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

2.7.4 使用指针变量作为函数参数

A.地址传递是什么

在这里插入图片描述

//2_7_8
#include<stdio.h>
void change(int* p){//参数类型是int型指针变量
    *p=233;
    }
int main(){
    int a=1;
    int* p=&a;
    change(p);//传入一个指针变量
    printf("%d ",a);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

B.实现交换两个数的功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//2_7_9
#include<stdio.h>
void swap(int* a,int* b){
    int temp=*a;
    *a=*b;
    *b=temp;
}
int main(){
    int a=1,b=2;
    int *p1=&a,*p2=&b;
    swap(p1,p2);
    printf("a= %d,b=%d\n",*p1,*p2);
    return 0;
}

在这里插入图片描述

下面指出2种初学容易犯下的错误

b1.错误写法1

//2_7_11
#include<stdio.h>
void swap(int* a,int* b){
    int* temp;//temp也是指针变量
    *temp=*a;
    *a=*b;
    *b=*temp;
}
int main(){
    int a=1,b=2;
    int *p1=&a,*p2=&b;
    swap(p1,p2);
    printf("a= %d,b=%d\n",*p1,*p2);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

//2_7_11
#include<stdio.h>
void swap(int* a,int* b){
    int x;
    int* temp=&x;//int* temp;
    *temp=*a;
    *a=*b;
    *b=*temp;
}
int main(){
    int a=1,b=2;
    int *p1=&a,*p2=&b;
    swap(p1,p2);
    printf("a= %d,b=%d\n",*p1,*p2);
    return 0;
}

在这里插入图片描述

b2.错误写法2

//2_7_12
#include<stdio.h>
void swap(int* a,int* b){
    int* temp = a;
    a=b;
    b=temp;
}
int main(){
    int a=1,b=2;
    int *p1=&a,*p2=&b;
    swap(p1,p2);
    printf("a= %d,b=%d\n",*p1,*p2);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

2.7.5 引用

A.引用的基本概念

a1.含义

在这里插入图片描述

a2.使用

在函数的参数类型后面加&即可(&一般加在参数类型后面或者变量名前面都可以,考虑到引用是变量别名的意思,所以一般加在变量名前面),示例如下:

//2_7_10
#include<stdio.h>
void change(int&x){
    x=1;
}
int main(){
    int x=10;
    change(x);
    printf("%d\n",x);
    return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

B.指针的引用

在这里插入图片描述

//2_7_13
#include<stdio.h>
void swap(int* &p1,int* &p2){
    int* temp=p1;
    p1=p2;
    p2=temp;
}
int main(){
    int a=1,b=2;
    int *p1=&a,*p2=&b;
    swap(p1,p2);
    printf("a=%d,b=%d\n",*p1,*p2);
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值