c语言指针数组与二级指针

原代码如下,如果要通过二级指针p,从a[]中每个字符串的第二个字母开始输出各个字符串(如bcd fg等),该如何修改代码?


#include<stdio.h>
int main()
{
    char *a[]={"abcd","efg","hijkl","mno"};
    char **p=a;
    int i;
    for(i=0;i<4;i++)
        printf("%c",**p++);
    return 0;
}

可以通过在指针p指向的字符串后面加1来跳过第一个字母,然后再输出后面的字符串。修改后的代码如下:

#include<stdio.h>
int main()
{
    char *a[]={"abcd","efg","hijkl","mno"};
    char **p=a;
    int i;
    for(i=0;i<4;i++)
        printf("%c",*((*p)+1)); // 跳过第一个字母
        p++; // 指向下一个字符串
    }
    return 0;
}

输出结果为:bcd fg ijk lno。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7600034
  • 除此之外, 这篇博客: 第4讲 组合逻辑电路实例:编码器、译码器、数据选择器、加法器、数值比较器、代码转换器——计算机逻辑基础中的 BCD-二进制码转换器 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 利用加法电路:
    1. 将BCD码中的每一位的权值用二进制数表示
    2. 将所给BCD码中“1”所代表的二进制数相加
    3. 相加结果即为所给的BCD码的等效二进制数

    在这里插入图片描述

    如将BCD码1000 0111转换为二进制数:
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    通过使用二级指针 p,可以从 a[] 数组中每个字符串的第二个字母开始输出各个字符串。具体的解决方案如下:

    1. 定义一个指向指针的二级指针 p:

    c char **p;

    1. 将 p 指向 a 数组的首元素:

    c p = a;

    1. 使用双重指针 p 遍历 a 数组,并输出每个字符串的第二个字符及其后面的字符:

    c while (*p != NULL) { printf("%s\n", *p + 1); p++; }

    在上述代码中,*p 指向 a 数组中的一个字符串,*p + 1 指向该字符串的第二个字符及其后面的字符,因为指针本身的加减操作会根据指针类型的不同而产生不同的效果,此处的 + 运算会根据指向的字符类型自动进行指针增量计算,即将指针加上一个字符大小(通常为 1 个字节)。

    1. 完整的修改后的代码如下:

    ```c #include

    int main() { char a[] = {"abc", "defg", "hijkl", NULL}; char *p;

       p = a;
       while (*p != NULL) {
           printf("%s\n", *p + 1);
           p++;
       }
    
       return 0;
    

    } ```