Chenemy 2023-07-27 12:33 采纳率: 100%
浏览 27
已结题

VS2022中C语言间接寻址级别不同

下面这段代码是在VS2022上运行的,我想实现二级字符指针数组的访问,就是通过p访问到x这些字符串,然后运行的时候报错间接寻址级别不同,有无同学解答一下,刚学C语言,谢谢了!

# include <stdio.h>
int main()
{
    char x[] = "abcd", y[] = "bcde", z[] = "cdef";
    char m[] = "abcd", n[] = "bcde", f[] = "cdef";
    char o[] = "abcd", p[] = "bcde", q[] = "cdef";
    char* a[] = { x,y,z };
    char* b[] = { m,n,f };
    char* c[] = { o,p,q };
    char** p[] = { *a,*b,*c };
    for ( int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%s", *((p+i)+j));
        }
        printf("\n");
    }
    return 0;
}


img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-07-27 14:19
    关注

    修改如下,改动处见注释,供参考:

    # include <stdio.h>
    int main()
    {
        char x[] = "abcd", y[] = "bcde", z[] = "cdef";
        char m[] = "abcd", n[] = "bcde", f[] = "cdef";
        char o[] = "abcd", p[] = "bcde", q[] = "cdef";  // 这行里已经定义指针 p
        char* a[] = { x,y,z };
        char* b[] = { m,n,f };
        char* c[] = { o,p,q };
        char** pt[] = { a,b,c };    // 这行里 p 不能重复定义, char** p[] = { *a,*b,*c }; 数组元素为 a b c
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                printf("%s", *(*(pt + i) + j)); // 输出里需解引用  printf("%s", *((p+i)+j)); 
            }
            printf("\n");
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 创建了问题 7月27日