今天继续对于C语言的指针进行学习,话不多说,进入正题。
数组作为参数传递【指针传递】:
下面通过一系列程序来说明数组作为参数传递是属于指针传弟:
一维数组:
编译运行,看结果:
编译运行:
我们知道“数组定义之后,它的首地址是无法重新指向新地址的”,如下:
编译:
而请看如下情况:
编译运行:
说明:当一维数组作为函数参数时,有三种写法都等价,都是int*a
二维数组:
编译:
如果省略了二维数会怎样呢?
编译:
说明:
命令行参数:
main函数是程序的入口函数,今天来对其参数进行研究,先通过程序来直观的感受下:
运行结果:
分析一下内存模型:
所以,可以通过循环,将命令行的所有参数都打印出来:
对于上面的程序,也能用指针的指针来代替,两种方式是等价的:
输出结果:
结构体指针:
下面通过代码来进行说明:
运行结果:
从运行结果上来看,貌似跟理解有点违背,事实上上面的输出0是不确定的,但是为了确保malloc分配的结构体成员被初始为0,需用到memset函数,用man查看下:
注意:malloc分配的内存,是没有设置的,对于这个结构体,也就是里面的成员都是没有初始化的,这时可用memset函数进行初始化
其实对于上面这个,可用一个函数来代替:calloc,查看man帮助:
从上面帮助来看,calloc=malloc+memset
运行结果一样:
下面介绍一下内存拷贝函数:memcpy
看具体使用:
运行:
分开理解:
结构体定义时不能定义自身结构体变量
编译:
但可以定义自身的指针:
编译:
好了,今天的内容学到这,下次再见!!