鱼C论坛

 找回密码
 立即注册
查看: 2046|回复: 6

关于结构体和指针的小疑问,大家帮看一下

[复制链接]
发表于 2014-2-12 19:01:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <conio.h>

  4. struct student
  5. {
  6. long num;
  7. char name[20];
  8. };

  9. void main()
  10. {
  11. struct student stu;
  12. long *p_num;
  13. char *p_name;
  14. p_num = &stu.num;
  15. p_name = stu.name;//为什么此处不加&,求解。。。
  16. *p_num = 10001;
  17. strcpy(p_name, "LiHua");//这里复制过去的到底是地址还是数值呢?求解~
  18. printf("num = %ld\nname = %s\n", *p_num, p_name);//没有用*取值,难道它一直是数值,但是声明的是指针啊?
  19. }
复制代码
我把疑问打在注释里面了,有三点不太明白,为什么stu.name不用&呢,还有那个函数复制过去的到底是地址还是数值啊?求解,谢谢大家了哈~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-12 19:25:53 | 显示全部楼层
第一个:这是语法规定 问你为什么跑得快要用“得”而不用“的”???
char * i;
可以直接写  i = "XXXXXXXXX";
第二个:你自己看看strcpy的函数实现就知道了
  1. /**********************
  2.  * C语言标准库函数strcpy的一种典型的工业级的最简实现
  3.  * 返回值:目标串的地址。
  4.  * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
  5.  * 参数:
  6.  * strDestination 目标串
  7.  * s

  8.  /*
  9.  GNU-C中的实现(节选):
  10.  */
  11.  char* strcpy(char *d, const char *s)
  12.  {
  13.    char *r=d;
  14.    while((*d++=*s++));
  15.    return r;
  16.  }
  17.  /* while((*d++=*s++)); 的解释:赋值表达式返回左操作数,所以在复制NULL后,循环停止 */
复制代码
PS:来自百度百科
第三个参考第一个  记住是怎么用的即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-12 19:26:32 | 显示全部楼层
学到后期你肯定要学为什么了现在不用管记住就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-12 19:44:07 | 显示全部楼层
p_name = stu.name;//为什么此处不加&,求解。。。
因为stu.name指向的就是name[20]的第一个字节


strcpy(p_name, "LiHua");//这里复制过去的到底是地址还是数值呢?求解~
把"LiHua"复制进name[20]的前5个字节

printf("num = %ld\nname = %s\n", *p_num, p_name);//没有用*取值,难道它一直是数值,但是声明的是指针啊?

*p_num是p_num地址里面的值 就是10001 p_name就是char *指向name[20]的第一个字节

可能说的不太明白,你可以这样 逐语句下断,看看每走一句监视窗口里面变量的变化和地址的变化你就明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-2-12 22:18:06 | 显示全部楼层
很简单 看这个例子:
int num=20;
int *p_num=&num;
char name[20];
char *p_name=name;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-13 09:09:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-13 09:10:06 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-2-12 19:25
第一个:这是语法规定 问你为什么跑得快要用“得”而不用“的”???
char * i;
可以直接写  i = "XXXXX ...

呃,谢谢解答~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-2 19:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表