我正在尝试创建一个指针数组。在此代码中,数组"p"应该包含指向其他数组"a"、"b"one_answers"c"的指针。我搞不清我的代码出了什么问题。有什么帮助吗?
#include <stdio.h>
int main() {
int a[3]={'4','1','3'};
int b[3]={'a','1','3'};
int c[3]={'y','1','3'};
int *p[2];
p[1]=a[1];
*(p+1)= a+1;
printf("%d",p[1]);
return 0;
}
声明指向这些数组的指针数组
int a[3]={'4','1','3'};
int b[3]={'a','1','3'};
int c[3]={'y','1','3'};
你需要写
int * p[3] = { a, b, c };
在该声明中,用作初始值设定项的数组指示符被隐式转换为指向其第一个元素的指针。也就是说,如果写也是一样的
int * p[3] = { &a[0], &b[0], &c[0] };
此表达式语句
p[1]=a[1];
不正确,因为左侧操作数的类型为int *
,而右侧操作数的类别为int
。
此声明
*(p+1)= a+1;
这相当于语句
p[1] = a + 1;
或
p[1] = &a[1];
是正确的。
在本声明中,
printf("%d",p[1]);
使用了具有指针表达式CCD_ 4的不正确的转换说明符CCD_。
如果你想输出指针表达式p[1]
,那么你需要写
printf( "%pn", ( void * )p[1] );
如果要通过表达式p[1]
输出指向值,则需要编写
printf( "%dn", *p[1] );
或者,如果你想把它作为一个字符输出,你可以写
printf( "%cn", *p[1] );