zoukankan      html  css  js  c++  java
  • 指针(五)

    今天继续对于C语言的指针进行学习,话不多说,进入正题。

    数组作为参数传递【指针传递】: 
    下面通过一系列程序来说明数组作为参数传递是属于指针传弟:
    一维数组:
    编译运行,看结果:
     
    编译运行:
    我们知道“数组定义之后,它的首地址是无法重新指向新地址的”,如下:
     
    编译:
    而请看如下情况:
    编译运行:
     
    说明:当一维数组作为函数参数时,有三种写法都等价,都是int*a
     
    二维数组:
     
    编译:
     
    如果省略了二维数会怎样呢?
    编译:
    说明:
     
    命令行参数:
     
    main函数是程序的入口函数,今天来对其参数进行研究,先通过程序来直观的感受下:
    运行结果:
    分析一下内存模型:
    所以,可以通过循环,将命令行的所有参数都打印出来:
     
     
    对于上面的程序,也能用指针的指针来代替,两种方式是等价的:
    输出结果:
     
    结构体指针:
     
    下面通过代码来进行说明:
    运行结果:
    从运行结果上来看,貌似跟理解有点违背,事实上上面的输出0是不确定的,但是为了确保malloc分配的结构体成员被初始为0,需用到memset函数,用man查看下:
    注意:malloc分配的内存,是没有设置的,对于这个结构体,也就是里面的成员都是没有初始化的,这时可用memset函数进行初始化
    其实对于上面这个,可用一个函数来代替:calloc,查看man帮助:
     
    从上面帮助来看,calloc=malloc+memset
    运行结果一样:
     
    下面介绍一下内存拷贝函数:memcpy
    看具体使用:
    运行:
     
    分开理解:
    结构体定义时不能定义自身结构体变量
    编译:
     
    但可以定义自身的指针:
    编译:
     
    好了,今天的内容学到这,下次再见!!
  • 相关阅读:
    基于模糊Choquet积分的目标检测算法
    Android开发5:布局管理器2(表格布局TableLayout)
    JAVA WEB开发环境搭建教程
    linux下自助获取帮助
    dsp下基于双循环缓冲队列的视频采集和显示记录
    找工作笔试面试那些事儿(11)---数据库知识总结(2)范式
    【Todo】Zookeeper系列文章
    VC2010对Excel的操作
    hdu2647解题报告
    premake 在64位Ubuntu系统下编译32位GCC程序
  • 原文地址:https://www.cnblogs.com/webor2006/p/3477404.html
Copyright © 2011-2022 走看看