|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|