博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每日一练(三十五)
阅读量:3950 次
发布时间:2019-05-24

本文共 805 字,大约阅读时间需要 2 分钟。

文章目录

2.16 指针运算

指针的合法运算有以下几个:

  • 指针与整数的加减
  • 同类型指针的比较
  • 同类型指针的加减

当两个指针进行算术运算的时候,指针指向的地址值并不是单纯的数据移动,而是结合指针指向的数据类型的大小,如下:

在这里插入图片描述

注意!!!如果两个指针指向的不是同一个数组中的元素,相减之后的结果是未定义的。

指针还可以进行关系运算,也就是比较,如下的代码用指针的运算实现了数组的清零:

在这里插入图片描述

2.17 访问数组的形式

在这里插入图片描述

重点是C选项与D选项,本来&a指向的数据类型是int [10],但是前面结果(int)*类型强制转换,再+1就是移动一个int了;

D选项也是类似的,sizeof(int)为4,如果是(&a + sizeof(int)),则表示了在int数据类型的基础上移动四个int,就到了a[4],所以(char*)的强制转换使&a的数据类型变为char,则表示在char数据类型的基础上移动4个char,相当于一个int,这就指向了a[1].

2.18 很容易忽略的数组名是常量

一些涉及到数组的题目,看似考察了众所周知的特性,实际上埋得坑远不如此,如下:

在这里插入图片描述

这道题就很容易看错,s += 2;想当然地把s移动2个char的距离,指向‘c’,如果是这样想,那就正中下怀!!!

这里考察的是:数组名是一个地址常量,不可以修改常量,所以会编译报错!!!

2.19 指针在二维数组中的使用

笔试经常会考察指针结合二维数组的问题,比如有一个数组:

int a[4][5];

则结合指针可以得出如下结论:

&a = int(*)[4][5]    a+i = int(*)[5]    *(a+i) = int*    *(*(a+i)+j) = int a[i][j]    *(a[i]+j) = int a[i][j]

在这里插入图片描述

例子如下:

在这里插入图片描述

在这里插入图片描述

2.20 二维字符串数组问题

在这里插入图片描述

既然数组说明了一行有10个元素,那就不以实际存在的判断了。

转载地址:http://rxwzi.baihongyu.com/

你可能感兴趣的文章
java匿名内部类原理及使用
查看>>
java基础学习之Timer定时器使用
查看>>
Linux中修改环境变量及快速生效方法
查看>>
解决报错 “build.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”
查看>>
linux学习之tr操作符用法
查看>>
shell的dirname $0和readlink用法
查看>>
设计模式——外观模式详解
查看>>
Android APP架构设计——MVC、MVP和MVVM介绍
查看>>
Android APP架构设计——MVP的使用示例
查看>>
Android开发——布局性能优化的一些技巧(一)
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
设计模式——观察者模式详解
查看>>
Java集合——LinkedList源码详解
查看>>
Android开发——LinearLayout和RelativeLayout的性能对比
查看>>
NetWork——关于HTTP、HTTPS的知识总结(以及Android网络优化建议)
查看>>
Android开发——支付宝和微信支付快速接入流程
查看>>
NetWork——TCP的流量控制和拥塞控制
查看>>
Android开发——解决方法数越界问题
查看>>
算法相关——Java排序算法之希尔排序(五)
查看>>
算法相关——Java排序算法之选择排序(六)
查看>>