关于《指针的艺术》看书时所遇到的问题
2011-01-05 21:11
183 查看
2011年1月5号
指针与结构体
struct person {
char *name; // 姓名
char address[30]; // 家庭地址
int height; // 身高
struct person * next;
};
声明结构体对象的两种情况:
1)指明结构体: struct person John,然后John调用成员"John.name ”。
2)指明结构体指针:struct person * Nose,然后Nose调用成员"Nose->name ”,不过在使用Nose之前还得为Nose分配内存"Nose = new person;",否则会报错。
而这里需要注意的是成员的初始化:(以"John"为例)
其一,"name"是指针变量,赋值可以" John.name = Johnson; ",但不能直接" scanf("%s",John.name); ",需为"John.name"分配内存"John.name = new char;"才可以" scanf("%s",John.name); ”;
其二,"address"是指针常量,赋值可以"scanf(%s", John.address);"或 "strcpy(John.address, "china");",但不能" John.address = "china"; ",这里就没有必要给"John.address"分配内存了,因为结构体里已经指明了;
总之,在使用有关指针的时候一定要注意分配内存之后再使用!我经常犯这个错误。
若有不对,望各位朋友指出!Thank you!
指针与结构体
struct person {
char *name; // 姓名
char address[30]; // 家庭地址
int height; // 身高
struct person * next;
};
声明结构体对象的两种情况:
1)指明结构体: struct person John,然后John调用成员"John.name ”。
2)指明结构体指针:struct person * Nose,然后Nose调用成员"Nose->name ”,不过在使用Nose之前还得为Nose分配内存"Nose = new person;",否则会报错。
而这里需要注意的是成员的初始化:(以"John"为例)
其一,"name"是指针变量,赋值可以" John.name = Johnson; ",但不能直接" scanf("%s",John.name); ",需为"John.name"分配内存"John.name = new char;"才可以" scanf("%s",John.name); ”;
其二,"address"是指针常量,赋值可以"scanf(%s", John.address);"或 "strcpy(John.address, "china");",但不能" John.address = "china"; ",这里就没有必要给"John.address"分配内存了,因为结构体里已经指明了;
总之,在使用有关指针的时候一定要注意分配内存之后再使用!我经常犯这个错误。
若有不对,望各位朋友指出!Thank you!
相关文章推荐
- 关于今天在用spring字符集过滤器遇到的问题
- 关于使用LocationManager时遇到的问题
- 关于在Linux上安装solr遇到404的问题
- 关于执行Oracle下Sql语句中遇到的特殊字符问题解决办法。
- 关于C程序生成随机数遇到的问题
- 关于freeswitch1.5在ubuntu14.04上安装遇到的问题1
- go - 关于使用 channel 时遇到的死锁问题
- 关于结构体的一个特殊用法(总觉得遇到的问题就该记录一下哇)
- 关于GDI绘制遇到的几个问题
- 关于创建一个输入端和两个输出端遇到问题的解决
- 关于behaviac-master遇到的问题
- 关于装虚拟机遇到的若干问题
- 关于学习编程中会遇到的一些小问题
- 关于初学者.NET编程中遇到的问题(五)
- 做毕业设计遇到的关于fgets()函数的问题
- 关于 自己遇到的内存溢出问题
- 关于webstorm开发angular遇到的一些小问题(强迫症喜欢的)
- 关于Setup Factory打包MySQL数据库遇到的问题
- 关于将Java中序列化对象写入byte[]遇到的一些问题及解决方法
- 我在使用Unity 发布IOS真机过程时遇到的关于JIT的问题列表