c语言字符串大括号,C语言指针与字符串的问题,char **p={"abc","defg","hijkl"};怎么把大括号里的字符串全部打印出来?...

满意答案

char **p={"abc","defg","hijkl"}; 这个声明和初始化编译不能通过。

声明成:char *p[]={"abc","defg","hijkl"}; 相当于 声明 char *p[3];

你想用 **, 另声明 char **x; 把p的始地址传给它。

========

main()

{

char *p[]={"abc","defg","hijkl"};

char **x= &p[0];

printf("%s\n%s\n%s\n", *(p),*(p+1),*(p+2)); // 用 p 的方法

printf("%s\n%s\n%s\n", *x,*(x+1),*(x+2)); // 用 x 的方法

printf("%c\n",*(*(x+1)+2)); // 打印 1个字符

return 0;

}

===

C 语言 语句 里,[] 是运算符。有 “数组与指针关系" 恒等式: a[i] = * ( a + i)

套用 上面恒等式, 找出 语句里 2维数组与指针关系:

a[j][i] = (a[j]) [i] = * ( a[j] + i) = * ( *(a+j) + i )

把声明 char **x; 在语句里的x, 看成 2 维数组,就有

x[j][i] = *(*(x+j) +i);

j 是 行,i 是 列。追问: 先谢谢,我写的那条语句在ubuntu里编译是警告,printf("%s",p);打印出的是abc,但是后面的字符串不知道怎么打印出来。char *p[]={"abc","defg","hijkl"};这个定义可以打印出来,为什么char **p={"abc","defg","hijkl"};这个不可以呢?还是平时不这样书写。

追答:char *p[]={"abc","defg","hijkl"};

这个初始化里含3个字符串,编译器能数出来,编译器于是把上面声明理解为:

char *p[3]={"abc","defg","hijkl"};

也就是3个指针,分别指向3个字符串。

char **p={"abc","defg","hijkl"}; 这里**p 是2重指针(指针的指针),编译器无法处理。

printf("%s",p);打印出的是abc ,那是你的编译器把它指向 0 点。歪打歪着。

00分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值