关于结构体和指针的小疑问,大家帮看一下
#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不用&呢,还有那个函数复制过去的到底是地址还是数值啊?求解,谢谢大家了哈~
第一个:这是语法规定 问你为什么跑得快要用“得”而不用“的”???
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:来自百度百科
第三个参考第一个记住是怎么用的即可 学到后期你肯定要学为什么了现在不用管记住就好了 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的第一个字节
可能说的不太明白,你可以这样 逐语句下断,看看每走一句监视窗口里面变量的变化和地址的变化你就明白了 很简单 看这个例子:
int num=20;
int *p_num=#
char name;
char *p_name=name; machimilk 发表于 2014-2-12 19:44 static/image/common/back.gif
p_name = stu.name;//为什么此处不加&,求解。。。
因为stu.name指向的就是name的第一个字节
我好像明白点了,谢谢解答~ 牡丹花下死做鬼 发表于 2014-2-12 19:25 static/image/common/back.gif
第一个:这是语法规定 问你为什么跑得快要用“得”而不用“的”???
char * i;
可以直接写i = "XXXXX ...
呃,谢谢解答~
页:
[1]