2.3.2练习
Posted suomeimei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.3.2练习相关的知识,希望对你有一定的参考价值。
编写代码分别更改指针的值以及指针所指对象的值
#include <iostream> int main() { int i = 5, j = 10; int *p = &i; p = &j; *p = 15; j = 20; }
说明指针和引用的主要区别
- 指针本身就是一个对象,允许对其赋值和拷贝,而指针的生命周期内它可以指向几个不同的对象;引用不是一个对象,无法令引用重新绑定到另外一个对象。
- 指针无须在定义时赋值,和其他内置类型一样,在块作用域定义的指针如果没有被初始化,也将拥有一个不确定的值:引用必须在定义时赋处置。
请解释下述定义。在这些定义中有非法的吗?如果有,为什么?
int i = 0; (a)double* dp = &i; (b)int *ip = i; (c)int *p = &i;
a是非法的,dp是一个double指针,而i是一个int变量,类型不匹配。
b是非法的,不能直接把int变量赋给int指针,正确的做法是通过地址运算&i得到变量i在内存中的地址,然后再将该地址赋给指针。
请叙述下面这段代码的作用
int i=42; int *p1=&i; *p1=*p1 * *p1;
定义一个整型变量i并设置初始值为42,接着定义一个整型指针p1,令其指向变量i,最后取出p1所指的当前值,计算平方后重新赋值给p1所指的变量i。
假设p是一个int型指针,请说明下述代码的含义
if(p) //... if(*p)//...
如果指针指向一个真实存在的变量,则其值必不为0,此时为真。如果指针没有指向任何对象或者是无效指针,则对p的使用将引用将引发不可预计的结果。
如果该int值为0,则条件为假,否则条件为真。
给定指针p,你能知道它是否指向了一个合法的对象吗?如果能,叙述判断的思路;如果不能,也说明原因
只需要把p作为if的语句的条件即可,如果p的值是nullptr,则条件为假,反之为真。
一般处理的办法是将if(p)置于try结构中,当程序块顺利执行时,表示p指向了合法的对象,当程序块出错跳转到catch语句时,表示p没有指向合法的对象。
下面这段代码中为什么p合法而lp非法?
int i=42; void *p=&i; long *lp=&i;
void* 是一种特殊的指针类型,可用于存放任意对象的地址。
lp是一个长整型指针,而i只是一个普通整型数,两者的类型不匹配。
以上是关于2.3.2练习的主要内容,如果未能解决你的问题,请参考以下文章
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段