|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 notfornothing 于 2019-6-12 21:26 编辑
两个程序的区别
主要不懂在第一个程序printf 参数是*(name+i)
第二个程序printf 参数是name+i的区别
我所理解的指针数组的赋值应该是一个意思,但是输出printf参数形式却不同
- #include <stdio.h>
- #include <conio.h>
- main()
- {
- int i;
- char *name[]={"jack",
- "tom",
- "lucy"};
- for (i=0;i<3;i++)
- {
- printf("%s\n",*(name+i));
- }
- getch();
- }
复制代码
- #include <stdio.h>
- #include <conio.h>
- main()
- {
- int i;
- char n = 'a';
- char *name[3]={&n};
- for (i=0;i<3;i++)
- {
- printf("请输入第%d位的姓名:",i+1);
- scanf("%s",name+i);
- }
- for (i=0;i<3;i++)
- {
- printf("%s\n",name+i);
- }
-
- getch();
- }
复制代码
在我的系统上,name变量中的内容会被覆盖
注意,是name变量的内容
这意味着,name变量是作为3 * 8 = 24 个字节的内存空间来使用的,我的系统上一个指针8个字节
第3次输入,也就是name + 2
也就是让scanf把字符串输入到name[2]这个位置,这个位置有8个字节的空间,也就是说第3次输入只能输入7个字符,超过7个字符就覆盖到name变量后面的内容了,在我这边会报错
|
|