zoukankan      html  css  js  c++  java
  • 练习2.19、2.20、2.21、2.22、2.23、2.24

    2.19:说明指针与引用的主要区别?

    引用,即别名,是给一个对象取别名,一旦给一个对象引用了,那么这个引用就与对象绑定在了一起,任何对该引用的操作,都是对变量的操作

    一个引用与一个对象绑定了,就不能再与其他对象绑定,引用不是一个对象,没有内存空间,它必须在定义时初始化,它不像赋值一样是遵从拷贝

    的操作。

    指针,其存放了对象的地址,在其生命周期内,先后可以指向不同的对象,它必须初始化,不然会出现未定义的指针变量的值,指针本身也是对象,

    也有其自身的内存空间,也可以使用解引用的操作去访问指针所指对象的值,指针与引用一样也必须遵从类型匹配,指针的值可以是空指针,也可以是

    指向某个对象,或者指向某对象的地址的下一个位置。

    2.20:请叙述下面这段代码的作用。

    int i=42;  //定义一个int类型的变量 i 并给它赋值为42

    int *p1=&i;  //int类型的指针p1存放着变量i的地址

    *p1=*p1* *p1;  //两个指针中的值相乘,然后再将结果赋值给p1指针。

    2.21:请解释下述定义。在这些定义中有非法的吗?如果有,为什么?

    int i=0;

    (a)  double* dp=&i;  (b)  int *ip=i;  (c)  int *p=&i;

    a)非法。指针变量要求类型匹配,不能把int类型的变量的地址赋值给double类型的指针。

    b)非法。指针变量存放的是地址,而不是变量值。

    c)合法。

    2.22:假设p是一个int型指针,请说明下述代码的含义。

    if(p)  //指针存放的地址若为空,则条件为假,即空指针,或者指针是无效指针;否则条件为真。

    if(*p)  //指针指向的对象的值若为0,则条件为假,否则条件为真。

    2.23:给定指针p,你能知道它是否指向了一个合法的对象吗?如果能,叙述判断的思路:如果不能,也请说明原因?

    如果一个指针,没有进行初始化,那么它指向的对象是未定义的,无法判断它指向的对象所在的内存空间是不是合法的,此时编译器会报错。

    如果一个指针,经过了初始化,并且再对象定义之后,那么在使用它时,如果它指向了一个对象,只要这个对象具有和给定指针的对象相同类型的,且有自己的存储空间,

    那么即可以说指向的对象合法。

    2.24:在下面这段代码中为什么p合法而lp不合法?

    int i=42;  void *p=&i;  long *lp=&i;

    因为指针p是void* 类型的,所以可以存放任意类型的对象,而指针变量需要类型匹配,指针lp是long* 类型的,所以不能将int类型变量的地址给lp。

  • 相关阅读:
    数据结构与算法分析
    案例分析作业
    实验六——循环结构程序练习总结
    实验五——循环结构学习总结
    实验四——多分支结构及本章总结
    实验三——for 语句及分支结构else-if
    第二次作业及总结——数据类型和运算符
    2-c语言作业
    自然博物馆参观
    2019-2020-1学期 20192409《网络空间安全专业导论》第四周学习总结
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9351340.html
Copyright © 2011-2022 走看看