谓我心忧 发表于 2014-2-12 19:01:30

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

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

struct student
{
long num;
char name;
};

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不用&呢,还有那个函数复制过去的到底是地址还是数值啊?求解,谢谢大家了哈~

牡丹花下死做鬼 发表于 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:来自百度百科
第三个参考第一个记住是怎么用的即可

牡丹花下死做鬼 发表于 2014-2-12 19:26:32

学到后期你肯定要学为什么了现在不用管记住就好了

machimilk 发表于 2014-2-12 19:44:07

p_name = stu.name;//为什么此处不加&,求解。。。
因为stu.name指向的就是name的第一个字节


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

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

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

可能说的不太明白,你可以这样 逐语句下断,看看每走一句监视窗口里面变量的变化和地址的变化你就明白了

oggplay 发表于 2014-2-12 22:18:06

很简单 看这个例子:
int num=20;
int *p_num=&num;
char name;
char *p_name=name;

谓我心忧 发表于 2014-2-13 09:09:33

machimilk 发表于 2014-2-12 19:44 static/image/common/back.gif
p_name = stu.name;//为什么此处不加&,求解。。。
因为stu.name指向的就是name的第一个字节



我好像明白点了,谢谢解答~

谓我心忧 发表于 2014-2-13 09:10:06

牡丹花下死做鬼 发表于 2014-2-12 19:25 static/image/common/back.gif
第一个:这是语法规定 问你为什么跑得快要用“得”而不用“的”???
char * i;
可以直接写i = "XXXXX ...

呃,谢谢解答~
页: [1]
查看完整版本: 关于结构体和指针的小疑问,大家帮看一下