| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
#include<stdio.h> 
int main(void) 
{ 
        char str[10]; 
        scanf_s("%s", str,10); 
        char(*p)[3] = (char (*)[3])str; 
        for (int j = 0; j < 3; j++) 
        { 
                for (int i = 0; i < 3; i++) 
                        printf("%c ", p[j][i]); 
                printf("\n"); 
        } 
        return 0; 
} 
 
其中的   char(*p)[3] = (char (*)[3])str;  这一段,这个char(*)[3]str 所表示的意义是什么? 
为什么会有这样的操作?把str变成二维数组??中间*号旁边的括号可以去掉吗?? 
 
求助_(:з」∠)_QAQ
不是,str 的结构并没有改变。因为 p 要指向 str 才可以打印 str 的内容,但是如果没有强制转型,不能够用下标。那个强制转型只不过是为了匹配数据类型。这里要注意的是【a = b】其实是把 b 拷贝给 a。所以 (*p)[3] 得到的是一个副本,不影响原有的 str 
如果不要把 p 变成跨度为 3,会比较难看
 - #include<stdio.h>
 
 - int main(void)
 
 - {
 
 -         char str[10];
 
 -         scanf_s("%s", str,10);
 
 - //        char(*p)[3] = (char (*)[3])str;
 
 -                 char *p = str;
 
 -         for (int j = 0; j < 9; j += 3)
 
 -         {
 
 -                 for (int i = 0; i < 3; i++)
 
 -                         printf("%c ", *(p+i+j));
 
 -                 printf("\n");
 
 -         }
 
 -         return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |