今天我们来看下面两组代码是如何进行的,指针数组是怎么运行的 在这几行短暂的代码里,我们输出的结果是"at",那为什么是这个结果呢?我们通过下面的示意图来看下 首先我们定义一个数组a,其中的每个数组元素都是char 类型的,说明每个元素都是指针类型的;然后我们又定义了一个二级指针把数组首元素的地址赋给指针pa; 随后指针pa自增1,所以此时pa指向了a[1]的地址,最后我们对pa进行解引用,得到了a[1]的值,a[1]中存放的值是’a’的地址,我们以%s的形式输出,就得到了’at’的结果. 不知大家可否明白了 下面我们再看一个难度加大的一个代码 看到上述代码,不知道你们是否推算成功,下面我们一起开看下过程,最重要的还是示意图必须画对 以上就是我对代码的一个理解,我们逐步看这几个执行语句是如何执行的 第一个,**++cpp; 指针cpp先自增1,然后指向了cp[1]的地址,然后解引用取cp[1]的值,由于cp[1]中存放的是c[2]的地址,再次解引用,取出c[2]的值,c[2]中存放的是’p’的地址,以"%s" 的形式打出,所以我们就得到了point这个结果. 第二个,*--* ++cpp+3;首先接上上面的步骤执行,cpp再次自增1,指向了cp[2],解引用,得到cp[2]的值,cp[2]中存放的是c+1;自减一,变成了c;此时cp[2]指向c[0];解引用得到c[0]的值. c[0]存放的是’E’的地址.再加3,我们就来到了’E的地址,以"%s"的形式输出,就得到了ER 第三个,cpp[-2] + 3,我们可以先变形一下,*、(cpp-2)+3。这样我们也许就一目了然了,cpp-2指向cp[0],解引用得到c[3]的地址,再解引用,得到‘f’的地址,随后加3,,以"%s"的形式输出,得到 st的结果。 第四个,cpp[-1][-1] + 1,我们依然可以变形一下,(*(cpp-1)-1)+1;这一步可真不好变呢。cpp-1指向从cp[1];解引用得到c[2]地址,我们减一,随后解引用,我们 就得到了从’n’的地址,再加1,以"%s"的形式输出,得到ew的结果。
好了,以上就是指针的简单运用,it’s funning~
|