【C语言 学习记录】七、指针

本文详细介绍了C语言中的指针概念,包括指针变量、地址、运算、数组访问(一维和二维)、字符串操作、指针数组、多级访问、函数指针以及指针函数,还涉及了main函数的返回值和参数特性。
摘要由CSDN通过智能技术生成

1.指针变量

指针:地址。

指针变量:存放另一个变量地址的变量。

  • 定义

    类型标识符(所指变量类型) *变量名;

    //类型标识符(所指变量类型) *变量名;
    int a,*pa;
    float b,*pb;
  • 初始化

    类型标识符 *变量名=初始地址;

    //类型标识符 *变量名=初始地址;
    int a,*pa=&a;
  • 指向
    int a,*pa;
    pa=&a;
  • 空指针

    无指向

    int *pa=0;
    folat *pb=NULL;

2.指针的运算

①   取地址运算符“&”

②   取内容运算符“*”

③   指针的偏移

  • 数组指针
    int a[N],*p;
    p=a[N];
    p=p+n;  //指向a[0]后第n个元素
  • 变量指针

    变量1的地址值 ± n(同类型变量个数) * sizeof(类型);

    int a,*pa;
    pa=&a;
    p=p+4;  //指向a的后一个的变量

3.数组的访问

①   一维数组的访问

  • 通过下标访问

    运行结果:a[2]的值为:2。

    #include <stdio.h>
    
    int main(){
        int a[3]={0,1,2};
        int b,i;
        
        i=2;
        b=a[i];  //通过下标访问
        printf("a[%d]的值为:%d。",i,b);
    
        return 0;
    }
  • 通过数组名访问

    运行结果:a[2]的值为:2。

    #include <stdio.h>
    
    int main(){
        int a[3]={0,1,2};
        int b,i;
        
        i=2;
        b=*(a+i);  //通过数组名访问
        printf("a[%d]的值为:%d。",i,b);
    
        return 0;
    }
  • 通过指针访问

    运行结果:a[2]的值为:2。

    #include <stdio.h>
    
    int main(){
        int a[3]={0,1,2},*p;
        int b,i;
        
        p=a;
        
        i=2;
        b=*(p+i);  //通过指针访问
        printf("a[%d]的值为:%d。",i,b);
    
        return 0;
    }

②   二维数组的访问

  • 通过下标访问

    运行结果:a[1][1]的值为:4。

    #include <stdio.h>
    
    int main(){
        int a[2][3]={{0,1,2},{3,4,5}};
        int b,i,j;
        
        i=1;
        j=1;
        b=a[i][j];  //通过下标访问
        printf("a[%d][%d]的值为:%d。",i,j,b);
    
        return 0;
    }
  • 通过地址访问

    运行结果:a[1][1]的值为:4。

    #include <stdio.h>
    
    int main(){
        int a[2][3]={{0,1,2},{3,4,5}};
        int b,i,j;
        
        i=1;
        j=1;
        b=*(*(a+i)+j);  //通过地址访问
        printf("a[%d][%d]的值为:%d。",i,j,b);
    
        return 0;
    }
  • 通过指针访问

    运行结果:a[1][1]的值为:4。

    #include <stdio.h>
    
    int main(){
        int a[2][3]={{0,1,2},{3,4,5}},*p;
        int b,i,j;
        
        p=&a[0][0];
        
        i=1;
        j=1;
        b=*(p+(i*3+j));  //通过指针访问
        printf("a[%d][%d]的值为:%d。",i,j,b);
    
        return 0;
    }
  • 通过行指针访问

    运行结果:a[1][1]的值为:4。

    /*
    行指针的定义:
        类型说明符 (*指针变量名)[一维数组长度];
        int (*p)[N];
    */
    
    #include <stdio.h>
    
    int main(){
        int a[2][3]={{0,1,2},{3,4,5}},(*p)[3];
        int b,i,j;
        
        p=a;
        
        i=1;
        j=1;
        b=*(*(p+i)+j);  //通过行指针访问
        printf("a[%d][%d]的值为:%d。",i,j,b);
    
        return 0;
    }

4.字符串的操作

  • 通过字符数组

    运行结果:该字符为:b。

    #include <stdio.h>
    
    int main(){
    	int i;
    	char a[]="abc";  //通过字符数组
    	
    	i=1;
    	printf("该字符为:%c。",a[i]);
    
        return 0;
    }
  • 通过字符串指针

    运行结果:该字符为:b。

    #include <stdio.h>
    
    int main(){
    	int i;
    
    	char *p;  //通过字符串指针
    	p="abc";  
    	
    	i=1;
    	printf("该字符为:%c。",*(p+i));
    
        return 0;
    }
  • 通过字符数组指针

    运行结果:该字符为:b。

    #include <stdio.h>
    
    int main(){
    	int i;
    
    	char a[]="abc",*p;  //通过字符数组指针
    	p=a;
    	
    	i=1;
    	printf("该字符为:%c。",*(p+i));
    
        return 0;
    }

5.指针数组

数组元素都是指针类型,用于存放内存地址。

//类型说明符 *指针数组名[指针数组长度]
int *p[5];

6.多级间访

间访(间接访问):通过指针访问变量的方式。

  • 单级访问

    运行结果:a的值为:2。

    #include <stdio.h>
    
    int main(){
    	int a=2,b,*p;
    	
    	p=&a;
    	b=*p;
    	
    	printf("a的值为:%d。",b);
        return 0;
    }
  • 多级访问

    运行结果:a的值为:2。

    #include <stdio.h>
    
    int main(){
    	int a=2,b,*p,**pp;
    	
    	p=&a;
    	pp=&p;
    	b=**pp;
    	
    	printf("a的值为:%d。",b);
        return 0;
    }

7.函数的调用

①   指针变量作为参数

  • 数值型指针变量
    //形参用指针
    int mul(int *pa,int *pb);
    int a,b;
    mul(&a,&b);
    
    //实参用指针
    int mul(int a,int b);
    int a,b,*pa,*pb;
    pa=&a;
    pb=&b;
    mul(*pa,*pb);
    
    //形参、实参都用指针(值传递)
    int mul(int *pa,int *pb);
    int a,b,*pa,*pb;
    pa=&a;
    pb=&b;
    mul(pa,pb);
  • 数组型指针变量
    //形参用指针
    int mul(int *pa,int *pb);
    int a[N],b[N];
    mul(a,b);
    
    //实参用指针
    int mul(int a[],int b[]);
    int a[N],b[N],*pa,*pb;
    pa=&a;
    pb=&b;
    mul(pa,pb);
    
    //形参、实参都用指针(值传递)
    int mul(int *pa,int *pb);
    int a[N],b[N],*pa,*pb;
    pa=&a;
    pb=&b;
    mul(pa,pb);
  • 字符串指针变量
    //形参、实参都用指针(值传递)
    void put(char *p);
    char *p="abc";
    put(p);

②   函数指针

运行结果:该字符为:q。

#include <stdio.h>

void put(char a){
	printf("该字符为:%c。",a);
}

int main(){
	void put(char a);  //函数声明

	void (*p)(char a);  //函数指针的定义
	p=put;

	char a='q';  //函数指针的调用
	(*p)(a);
	
    return 0;
}

8.指针函数

指针函数:返回值为指针的函数。

类型说明符 *函数名([形参列表]);

定义常配合static使用。

运行结果:3+4=7

#include <stdio.h>

int *add(int a,int b){
    static int c,*p;
    p=&c;
    c=a+b;
    return p;
}

int main(){
	int a=3,b=4,*p;
	p=add(a,b);
	printf("%d+%d=%d",a,b,*p);
	
    return 0;
}

9.main函数

①   main函数的返回值

       main函数的调用者是操作系统,对操作系统有返回值。

       对于DOS操作系统,返回值为0则程序正常结束;其他均表示程序非正常终止。

②   main函数的参数

       一般无参数。可带形参表示命令行参数的个数。

       C语言中main函数不能被其他函数调用。

  • 41
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kkkkkkkiko0401

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值