第一篇:C语言中如何定义一个结构能包含指向自己的指针
C语言中如何定义一个结构能包含指向自己的指针
C 语言中的结构当然可以包含指向自己的指针;[K&R2, 第6.5 节] 的讨论和例子表明了这点。NODEPTR 例子的问题是在声明next 域的时候typedef 还没有定义。为了解决这个问题,首先赋予这个结构一个标签(“struct node”)。然后,声明“next” 域为“struct node *”, 或者分开typedef 定义和结构定义, 或者两者都采纳。以下是一个修改后的版本:
struct node{
char *item;
struct node *next;
};
typedef struct node *NODEPTR;
至少还有三种同样正确的方法解决这个问题。
在用typedef 定义互相引用的两个结构时也会产生类似的问题, 可以用同样的方法解决。
第二篇:C语言指向结构体数组的指针
C语言指向结构体数组的指针
指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。
设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况现金网96y.org是一致的。
用指针变量输出结构数组。
struct stu{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,Zhou ping,M,45},{102,Zhang ping,M,62.5},{103,Liou fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58}
};
main(){
struct stu *ps;
printf(NotNametttSextScoretn);
for(ps=boy;psboy+5;ps++)
printf(%dt%stt%ct%ftn,ps-num,ps-name,ps-sex,ps-score);
}
在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。在main函数内定义ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。
应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能博彩公司排名q07i5.org使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。
ps=boy[1].sex;
而只能是:
ps=boy;(赋予数组首地址)
或者是:
ps=boy[0];(赋予0号元素首地址)
第三篇:C语言中结构体的使用
脚踏实地,心无旁骛,珍惜分分秒秒。紧跟老师,夯实基础。什么是结构体?
简单的来说
结构体就是一个可以包含不同数据类型的一个结构 它是一种可以自己定义的数据类型 它的特点和数组主要有两点不同
首先结构体可以在一个结构中声明不同的数据类型 第二相同结构的结构体变量是可以相互赋值的 而数组是做不到的
因为数组是单一数据类型的数据集合 它本身不是数据类型(而结构体是)数组名称是常量指针
所以不可以做为左值进行运算
所以数组之间就不能通过数组名称相互复制了 即使数据类型和数组大小完全相同
定义结构体使用struct修饰符 例如:
struct test { float a;int b;};
上面的代码就定义了一个名为test的结构体 它的数据类型就是test 它包含两个成员a和b 成员a的数据类型为浮点型 成员b的数据类型为整型
由于结构体本身就是自定义的数据类型
定义结构体变量的方法和定义普通变量的方法一样
test pn1;
这样就定义了一test结构体数据类型的结构体变量pn1 结构体成员的访问通过点操作符进行
pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作
注意:结构体生命的时候本身不占用任何内存空间
只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存
结构体
同样是可以定义指针的
那么结构体指针就叫做结构指针
结构指针通过->符号来访问成员
下面我们就以上所说的看一个完整的例子: #include
struct test//定义一个名为test的结构体 { int a;//定义结构体成员a int b;//定义结构体成员b };
void main(){ test pn1;//定义结构体变量pn1 test pn2;//定义结构体变量pn2
pn2.a=10;//通过成员操作符.给结构体变量pn2中的成员a赋值 pn2.b=3;//通过成员操作符.给结构体变量pn2中的成员b赋值
pn1=pn2;//把pn2中所有的成员值复制给具有相同结构的结构体变量pn1 cout<
test *point;//定义结构指针
point=&pn2;//指针指向结构体变量pn2的内存地址 cout<
a=99;//通过结构指针修改结构体变量pn2成员a的值 cout<
a<<“|”<
b< 总之 结构体可以描述数组不能够清晰描述的结构 它具有数组所不具备的一些功能特性 下面我们来看一下 结构体变量是如何作为函数参数进行传递的 #include struct test { char name[10];float socre;}; void print_score(test pn)//以结构变量进行传递 { cout< void print_score(test *pn)//一结构指针作为形参 { cout< name<<“|”< socre< void main(){ test a[2]={{“marry” 88.5} {“jarck” 98.5}};int num = sizeof(a)/sizeof(test);for(int i=0;i void print_score(test *pn)的效率是要高过void print_score(test pn)的 因为直接内存操作避免了栈空间开辟结构变量空间需求 节省内存 下面我们再说一下 传递结构引用的例子 利用引用传递的好处很多 它的效率和指针相差无几 但引用的操作方式和值传递几乎一样 种种优势都说明善用引用可以做到程序的易读和易操作 它的优势尤其在结构和大的时候 避免传递结构变量很大的值 节省内存 提高效率 #include struct test { char name[10];float socre;}; void print_score(test &pn)//以结构变量进行传递 { cout< void main(){ test a[2]={{“marry” 88.5} {“jarck” 98.5}};int num = sizeof(a)/sizeof(test);for(int i=0;i #include struct test { char name[10];float socre;}; void print_score(test &pn){ cout< test get_score(){ test pn;cin>>pn.name>>pn.socre;return pn;} void main(){ test a[2];int num = sizeof(a)/sizeof(test);for(int i=0;i //------例程2-- #include struct test { char name[10];float socre;}; void print_score(test &pn){ cout< void get_score(test &pn){ cin>>pn.name>>pn.socre;} void main(){ test a[2];int num = sizeof(a)/sizeof(test);for(int i=0;i 第一: 例程1中的 test get_score(){ test pn;cin>>pn.name>>pn.socre;return pn;} 调用的时候在内部要在栈空间开辟一个名为pn的结构体变量 程序pn的时候又再次在栈内存空间内自动生成了一个临时结构体变量temp 在前面的教程中我们已经说过 它是一个copy 而例程2中的: void get_score(test &pn){ cin>>pn.name>>pn.socre;} 却没有这一过程 不开辟任何新的内存空间 也没有任何临时变量的生成第二: 例程1在mian()中 必须对返回的结构体变量进行一次结构体变量与结构体变量直接的相互赋值操作 for(int i=0;i 而例程2中由于是通过内存地址直接操作 所以完全没有这一过程 提高了效率 for(int i=0;i 函数也是可以返回结构体应用的 例子如下: #include struct test { char name[10];float socre;}; test a; test &get_score(test &pn){ cin>>pn.name>>pn.socre;return pn;} void print_score(test &pn){ cout< void main(){ test &sp=get_score(a);cin.get();cout< 调用get_score(a);结束并返回的时候 函数内部没有临时变量的产生 返回直接吧全局结构变量a的内存地址赋予结构引用sp 最后提一下指针的引用 定义指针的引用方法如下: void main(){ int a=0;int b=10;int *p1=&a;int *p2=&b;int *&pn=p1;cout < pn就是一个指向指针的引用 它也可以看做是指针别名 总之使用引用要特别注意它的特性 它的操作是和普通指针一样的 在函数中对全局指针的引用操作要十分小心 避免破坏全局指针! 给自己重新定义高品質生活 最近和友人在美猫会聚首,一个话题:高品质生活,深深吸引我们详谈下去。我对我们的谈话受益匪浅,认为我们有必要对品质生活重新下一个定义。 是否是高品质生活关键是你怎样看待生活的标准,不是不缺钱生活就一定会高品质,也不是有了户外活动和精神上的放松就一定会是高品质生活.从另一层面来讲,都市人群享受自由的生活空间,金钱也会是很客观的一面。所谓品质在这个年代已经被定位于精致便是品质,生活源于我们自身。享受是大多数都市人群本能的放松压力的另一个复数名词。 高品质生活主要是看你对身边发生的事情认识,你对待身边的人的方式和他们对你的回报,你快乐吗? 总之快乐的生活高于一切! 高品质的生活还取决于自己身心的和谐度。你做的事是不是你喜欢的事或是你想要做的事。一件事情的发生你对其有怎样的认识,它是让你觉得人生更加完整了还是让你觉得自己宝贵的时间被浪费了。如果你所经历的事你觉得可以构成你人生中比较有意义的一部分,那么不管事情的好坏,至少你从中学会了人生,完善了人生,那么你这个人的生活品质是比较高的;反之,如果一个人觉得他的生活不能给他一种充实,安定的感觉,他觉得他做的很多事情都没有意义或是给他人生的发展没有太大的帮助,容易烦躁,出尔反尔的话,那这个人的生活品质就不高了。举个很简单的例子,一个农民,收入平平,但有一个幸福的家庭,过着安定的生活,他认为他的劳动可以给家人带来幸福,那我们就可以说他有一个高品质的生活;一个大学生,衣食无忧,但是整天碌碌无为,不爱学习,挥霍时间最后还要怪罪到国家的教育制度上,这种不思进取的学生我们可以说他的生活品质非常低。 高品质生活没有绝对的界限,主要是看你对这个世界,这个社会的看法。内心坚强乐观的人总是可以找到事件的本质,从事件中获得收获或是吸取教训;内心脆弱自卑的人只会对这个世界产生更多的绝望与抱怨。想要提高自己生活的品质,首先要锻炼自己的心智,让自己成为一个自信,乐观,豁达,善良,懂得感恩的人;其次,自己一定要有理想,肯吃苦努力,坚持自我,助人为乐,这样,你才会成为一个尊敬别人并受别人尊敬的人。别人对你的尊敬程度会直接影响你的社会地位与社会满足感。只有一个对世界有信心的人,才会活得快乐,才会体验到所谓的高品质生活。 和友人在美猫会的促膝相谈,使我们深刻认识到金钱不等于品质生活。在点燃香烟,无意间再一次看到美猫会的宗旨“打造爱美、爱生活、爱事业的平台”,此时,我们都再一次受到震撼,因为美猫网极具超前的眼光和人文关怀,使我们自认拥有高品质生活的社会“精英”对自己曾经鄙陋的看法感到羞愧,能够在此获得真正生活的定义,有一种“朝闻道夕死足矣”的感概。第四篇:给自己定义一个高品质生活