下面这段代码是在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;
}
修改如下,改动处见注释,供参考:
# 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;
}
#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** ptr[] = { a,b,c };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%s", ptr[i][j]);
}
printf("\n");
}
return 0;
}