今天继续对于C语言的指针进行学习,话不多说,进入正题。
数组作为参数传递【指针传递】:
下面通过一系列程序来说明数组作为参数传递是属于指针传弟:
一维数组:

编译运行,看结果:


编译运行:

我们知道“数组定义之后,它的首地址是无法重新指向新地址的”,如下:

编译:

而请看如下情况:

编译运行:

说明:当一维数组作为函数参数时,有三种写法都等价,都是int*a

二维数组:

编译:

如果省略了二维数会怎样呢?

编译:

说明:

命令行参数:

main函数是程序的入口函数,今天来对其参数进行研究,先通过程序来直观的感受下:

运行结果:

分析一下内存模型:

所以,可以通过循环,将命令行的所有参数都打印出来:


对于上面的程序,也能用指针的指针来代替,两种方式是等价的:

输出结果:

结构体指针:

下面通过代码来进行说明:

运行结果:

从运行结果上来看,貌似跟理解有点违背,事实上上面的输出0是不确定的,但是为了确保malloc分配的结构体成员被初始为0,需用到memset函数,用man查看下:


注意:malloc分配的内存,是没有设置的,对于这个结构体,也就是里面的成员都是没有初始化的,这时可用memset函数进行初始化

其实对于上面这个,可用一个函数来代替:calloc,查看man帮助:


从上面帮助来看,calloc=malloc+memset

运行结果一样:

下面介绍一下内存拷贝函数:memcpy

看具体使用:

运行:


分开理解:
结构体定义时不能定义自身结构体变量

编译:

但可以定义自身的指针:

编译:

好了,今天的内容学到这,下次再见!!