C语言快速入门系列七之指针进阶

本节引言

在第五节的时候我们对C里的指针进行了初步的学习,而作为C语言的灵魂, 

当然不会就那么简单,本节我们来进一步学习指针,包括:函数与指针, 

指针数组,二级指针,内存的动态 以及 const修饰指针。

本节学习路线图

C语言快速入门系列七之指针进阶_第1张图片

1.函数与指针

1)指针作为函数的形参

C语言快速入门系列七之指针进阶_第2张图片

2)指向函数的指针

C语言快速入门系列七之指针进阶_第3张图片

小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

3)指针函数

C语言快速入门系列七之指针进阶_第4张图片

小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

4)带参数的主函数

C语言快速入门系列七之指针进阶_第5张图片

该程序需要用到命令行参数,需要先编译生成exe,然后cmd命令行来到生成的exe文件 

所在目录下输入:文件名 one two three,结果会输出one two three。

2.指针数组

问题引入:如何保存一个字符串更好?如果保存的不止一个,而是多个字符串呢?

问题一回答

char name[20] = “~” ②char *name = “~” //前者定义了长度,不能直接赋值,明显后者比较灵活

问题二回答


C语言快速入门系列七之指针进阶_第6张图片

3.二级指针

C语言快速入门系列七之指针进阶_第7张图片

4.内存的动态分配

C语言快速入门系列七之指针进阶_第8张图片

代码示例

动态分配10个int类型的空间大小,如果大于这个数目则动态分配,否则利用realloc 

重新分配内存。

#include#include

#define N 10 

int main() 

    int *p = 0; 

    int  i,num,*q = 0; 

    p = (int *)malloc((N * sizeof(int))); 

    if(p == 0) 

    { 

        printf("内存分配错误!\n"); 

        exit(0); 

    } 

    printf("请输入要存储的元素个数:\n"); 

    scanf("%d",&num); 

    if(num <= N) 

    { 

        for(i = 0;i < N;i++) 

        scanf("%d",p+i); 

    } 

    else 

    { 

        for(i = 0;i < num;i++) 

        q = (int *)realloc(p,(N + N)*sizeof(int)); 

        if(q == 0)exit(0); 

        for(i = 0;i < num;i++) 

        scanf("%d",q + i); 

        p = q; 

    } 

    for(i = 0;i < num;i++) 

    printf("%3d",*(p+i)); 

    printf("\n"); 

    free(p); 

    return 0;   

}

5.使用const修饰指针变量

const 关键字修饰的数据类型是指 常类型,最简单的用法是用来定义const 

常量,具有不变性,比如int const a = 10; 要注意一点: 

const修饰的常量在声明的时候就要进行初始化赋值,不然后面是不能赋值的!

另外在与指针结合使用的时候,const 颠倒写 表示的意思是不一样的!

int const *a; //修饰指向的内容,a可变,a指向的内容不可变

int *const a; //修饰指针a,a不可变,a指向的内容可变

const int *a; //修饰指向的内容,a可变,a指向的内容不可变

const int *const A; //指针a和a指向的内容都不可变


上述结论可以自行修改下述例子里指针与指向的内容自行测试:

#includeintmain(){intconsta;    a =5;printf("a = %d\n",a);return0;}

你可能感兴趣的:(C语言快速入门系列七之指针进阶)