有人可以告诉我给定代码中第二个 printf 语句中的引用流吗?

标签 c pointers

#include <stdio.h>
char *c[]={"ENTNG", "NST","AMAZI","FIRBE"};
char** cp[]={c+3, c+2, c+1, c};
char ***cpp= cp;
int main() {
    printf("%s",**++cpp);
    printf("%s ",*--*++cpp+3);
    printf("%s",*cpp[-2]+3);
    printf("%s",cpp[-1][-1]+1);
}

最佳答案

 char *c[]= {
              "ENTNG", 
              "NST",
              "AMAZI",
              "FIRBE"
            }; 

*c[] 评估为一个字符,因此 c [] 指向字符并且 c 是一个指针数组-特点。 c 的元素已初始化为指向 字符数组

"ENTNG", "NST", "AMAZI" and "PIRBE"

.

char** cp[]={c+3, c+2, c+1, c};

**cp[] 计算出一个字符,*cp[] 是一个指向字符的指针,cp[]是一个指向字符指针的指针。因此 cp 是指向字符指针的指针数组。 cp 的元素已被初始化为指向 c 的元素。

char ***cpp= cp;

***cpp 计算出一个字符,**cpp 指向一个字符,*cpp 指向一个指针字符,cpp 指向一个指向字符的指针。

*(*(++cpp));         // Increment cpp and then follow the pointers 

Op : "AMAZI"

(*(--(*(++cpp))))+3; // Increment cpp,follow  the pointer to cp[2],
                     // decrement cp[2],follow  the pointer to  c[0],
                     // index  3 from  the address in  c[0].

Op : "NG "

(*(cpp[-2]))+3;      // Indirectly reference  - 2  from cpp yielding cp[0],
                     // follow  the pointer to c[3]; 
                     // index  3 from  the address in  c[3].

Op : "BE"

(cpp[-1][-1])+1      // Indirectly reference -1 from cpp yielding cp [1],
                     // indirectly reference  - 1 from 
                     // cp[1] yielding  c[1],index  1 from  the address in c[1].

Op : "ST"

输出将是AMAZING BEST


来源:C 语言拼图书

关于有人可以告诉我给定代码中第二个 printf 语句中的引用流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638527/

相关文章:

c - Aztec (DB) 条码生成器

c - 为什么这个指针传递没有按预期工作?

c - 尝试复制数组的内容

c# - 如果数据未按给定偏移量对齐,为什么 BitConverter.ToInt32 一次读取一个字节?

c++ - char* 丢失数据

c - 将指针存储为二维数组时出现问题

c++ - 计算代码的触发器!

带有字符串的 C 结构数组 - 操作/访问

c++ - 访问堆成员和堆栈对象之间的性能差异?

无法访问地址为 ""的内存 (gdb)