鱼C论坛

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

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

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

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

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

x
#include <string.h>
#include <stdio.h>
#include <conio.h>

struct student
{
long num;
char name[20];
};

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

使用道具 举报

发表于 2014-2-12 19:25:53 | 显示全部楼层
第一个:这是语法规定 问你为什么跑得快要用“得”而不用“的”???
char * i;
可以直接写  i = "XXXXXXXXX";
第二个:你自己看看strcpy的函数实现就知道了
/**********************
 * C语言标准库函数strcpy的一种典型的工业级的最简实现
 * 返回值:目标串的地址。
 * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。
 * 参数:
 * strDestination 目标串
 * s
 
 /*
 GNU-C中的实现(节选):
 */
 char* strcpy(char *d, const char *s)
 {
   char *r=d;
   while((*d++=*s++));
   return r;
 }
 /* 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-11-23 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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