zoukankan      html  css  js  c++  java
  • 第四次作业

    1.笔记

     

     2.代码列表

     

     3.存在问题

    (1)数组和结构体的相同与不同点。

         1>相同点 

        都由多个元素组成

        各个元素在内存中的存储空间是连续的

        初始化时不赋初值即为0

         2>不同点

        数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同

        数组用[]运算符和下标访问其成员,结构用.运算符和名字访问其成员

     数组变量是const,所以不能把一个数组变量再赋值给另外一个数组变量,但是结构可以

    (2)C语言函数不可以返回数组,但是把数组定义在结构体里面,就可以返回它,这是为什么呢?

            查资料这个问题好像很复杂,原文如下:C语言中的数据结构可以分为两类,第一类数据结构可以被赋值,而第二类数据结构不可以被赋值,数组属于第二类数据结构。与函数不能返回数组密切相关的事实是,C语言没有严格意义上的“数组类型”。可能从C语言代码角度来看,似乎有数组类型的变量,但是如果尝试将该变量像其他变量一样使用,得到的实际上是指向数组第一个元素的指针。而C语言的编译器很难区分指针和数组,所以我们不可能为C语言数组赋值。而且由于“赋值”操作也属于C语言的基本操作,为了贴合硬件,要求其必须在几个处理器周期完成,所以单个的“赋值”运算符 = 基本上不可能扩展到需要几千乃至几万个机器周期,以对成千上万个数组元素赋值。早期的C语言的确不支持结构体赋值,但是在后来的发展中却增加了结构体赋值能力。对此只能说是结构体幸运,“将C语言基本操作控制在少量机器周期内”只是一个准则,而不是限制。

    要知道,C语言结构体通常很小,只有几十到几百字节,增加结构体赋值能力无疑能够大大方便程序员编写代码。大多数情况下,结构体赋值操作并不会严重“超时”,这其实是一种平衡。

    总结就一句话:C语言不支持数组赋值,更多的原因是C语言本身的特点(贴合硬件)以及一些历史原因。不过,如果真的希望对数组赋值,也是有一些技巧的,例如将数组塞入结构体。

    (3)PTA

           刚开始看到这段程序有点懵,尤其是那个最后的*p,翻看笔记发现这是声明结构的一种形式,然后p是一个结构体指针,结构体指针访问成员用"->",结构体变量用"."
    正确的应该是p->str++,或者(*p).str++,所以选择B。

    课本例题

     9.1

     9.2

    9.3

     

  • 相关阅读:
    js冒泡排序
    HTML5 canvas 计时器
    centos 6.4安装杀毒软件clamAV 0.98[转]
    PHP大文件下载
    如何在 Eclipse 中使用插件构建 PHP 开发环境[转]
    CentOS 单用户模式:修改Root密码和grub加密[转]
    CentOS 6.0 VNC远程桌面配置[转]
    gprof使用介绍 (gcc -pg) [转]
    VMware NAT端口映射外网访问虚拟机linux
    shell判断文件是否存在[转]
  • 原文地址:https://www.cnblogs.com/zhuy-j/p/12593598.html
Copyright © 2011-2022 走看看