ImageVerifierCode 换一换
你正在下载:

汉克.docx

[预览]
格式:DOCX , 页数:21 ,大小:37.45KB ,
资源ID:8262967      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8262967.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汉克.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汉克.docx

1、汉克char a = hello world1和char *p = hello world2;的区别分类:C/C+2011-10-15 17:261053人阅读评论(1)收藏举报平台c1. 1#include2. 3. 24. 5. 3intmain()6. 7. 48. 9. 5chara=helloworld1;10. 11. 6char*p=helloworld2;12. 13. 7*(a+1)=q;14. 15. 8*(p+1)=q;16. 17. 9printf(%sn,a);18. 19. 10printf(%sn,p);20. 21. 1122. 23. 12运行结果段错误。注释

2、*(p+1)=q;运行结果hqlloworld1helloworld2原因:一、a与p类型不同:p为指向字符串的指针;a为保存字符串的数组。5 char a = hello world1;是个赋初值的字符数组。6 char *p = hello world2;是个字符串常量指针;指针变量p在栈里面字符串常量hello world2在全局数据区,数据段,只读,不可写二、hello world2和hello world1字符串保存的位置不同。hello world1保存在栈中,可用*(a+1)=q修改,hello world2保存在全局数据区,位置是在.rodata中,不能修改*(p+1)=q三、

3、只有2中情况下,数组名不可等同视为数组指针,&与sizeof操作符“&”的区别:&p取得是指针变量的地址,而非字符串helloworld2的首地址,p指向字符串的首地址;&a取得就是字符串hello的首地址。“siziof”的区别:下面假设在ia32平台上运行,保存变量的内存空间不同。sizeof(p);/return4,pointersizesizeof(a);/return13,arraysize1. 5chara=helloworld1;2. (gdb)pa3. $1=000006005?/空4. (gdb)s5. 6char*p=helloworld2;6. (gdb)pa7. $2=

4、helloworld18. (gdb)p&a9. $3=(char(*)13)0xbfde0583/在栈10. (gdb)s11. 7*(a+1)=q;12. (gdb)pp13. $4=0x80484c0helloworld2/在数据段14. (gdb)p&p15. $5=(char*)0xbfde0590/在栈在函数里char p = hello world 与 char *p = Hello world 造成的效果不一样,为什么?请高人告知!2006-11-09 19:02lee072|分类:其他编程语言|浏览2252次请看两个程序:(1)char *GetString(void) ch

5、ar p = Hello world; return p;void main() char *str = NULL; str = GetString(); cout str endl;(2)char *GetString(void) char *p = Hello world; return p;void main() char *str = NULL; str = GetString(); cout str endl;为什么(1)输出的是乱码,(2)能够输出 hello world我觉得可能是指针字符串和数组字符串分配空间时的区别,有谁知道具体的吗?谢谢!分享到:2006-11-09 19:

6、22提问者采纳这个我知道. 因为我也为这个问题困扰过, 做过一些探讨.Hello world作为静态字符串实际上存储在数据区,但写程序的人不知道这个地址,而程序本身知道。当某一函数以 char p = Hello world; .方式使用此静态字符串时,实际上相当于: char p12; strcpy(p, Hello world); .p12是在栈里临时分配的。虽然p指向的内容是Hello world, 但是这是复制品,不是原件。当函数结束,char p就被程序回收了,所以p的内容就不再是Hello world了。但如果以char *p=Hello world的方式使用,p指向的是静态字符串

7、存储的位置,也就是说指向Hello world的原件,当然没有问题了。如果想坚持用char p而不使用char *p, 有效方法必须是:static char p=Hello world;return p;原因我想很清楚了。static char 是静态的,存储在数据区。提问者评价多谢大虾的指点!建立单向动态链表,并对它进行插入、删除和输入等操作,包括以下任务:liapi123|Lv3|被浏览14次|来自360安全卫士2013-06-14 6:521、写一个函数creat,用来建立一个动态链表,各结点的数据由键盘输入。2、写一个函数print,将上题建立的链表中各结点的数据一次输出。3、写一个

8、函数del,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该项学生的结点)。4、写一个函数insert,用来向动态链表插入一个结点。5、将以上4个函数组成一个程序,有主程序先后调用这些函数,实现链表的建立、输出、删除和插入,在主程序中指定需要删除和插入的结点。请分别:1、用一个文件包含这些函数。2、把每个函数作为一个文件,然后把它们放在一个项目文件中处理满意回答#include #define LEN sizeof(struct number) struct number /*定义编号和数字*/ int name; int num; struct number * next;

9、 ; struct number * create() /*建立链表函数*/ struct number * head,* new,* tail,* p; int count=0; while(1) new=(struct number *)malloc(LEN); printf(input Name and Numbern); scanf(%d %d,&new-name,new-num); /*用户输入编号和数字*/ if(new-name=0) free(new); break; else if(count=0) head=new; tail=new; else tail-next=new

10、; tail=new; count+; tail-next=NULL; return(head); struct number * delist(struct number *head,int name) /*删除数字的函数*/ struct number * p0,* p1; p1=head; if(head=NULL) printf(nempty list!n); else if(p1-name=name) /*找到相同编号*/ head=p1-next; else while(p1-name!=name&p1-next!=NULL) /*逐一排查*/ p0=p1; p1=p1-next;

11、 if(p1-name=name) p0-next=p1-next; printf(The node is deletedn); else printf(The node can not been foud!n); return head; struct number * insert(struct number * head,struct number * new) /*插入函数*/ struct number * p0,* p1; p1= head; if(head=NULL) head=new; new-next=NULL; else if(new-namename) /*寻找新数字适合

12、的位置插入*/ new-next=head; head=new; else while(new-namep1-name) p0=p1; p1=p1-next; new-next=p0-next; p0-next=new; return(head); void print(struct number * head) /*打印函数*/ struct number * p; p=head; if(head=NULL) /*其实用不到*/ printf(list is emptyn); else while(p!=NULL) printf(%d%dn,p-name,p-num); /*打印链表内容*/

13、 p=p-next; struct number * find(struct number * head,struct number * new) /*查询函数*/ struct number * p0,* p1; p1= head; if(head=NULL) head=new; new-next=NULL; else if(new-name!=p1-name) /*寻找和输入编号相同的节点,不是则往下读*/ new-next=head; head=new; else while(new-name=p1-name) printf(”find successfully!n”); printf(

14、“%d %d”,p1-name,p1-num); return(head); void main() /*主函数*/ struct number * head,* p; int name; head=create(); /*往下逐一调用函数*/ print(head); printf(Input the delete number:); scanf(%d,&name); head=delist(head,name); print(head); printf(Input the inserted name and number:); p=(struct number *)malloc(LEN);

15、 scanf(&d&d,p-name,p-num); head=insert(head,p); print(head); printf(“Input the found name:”); scanf(“%d”,&name); head=find(head,p); print(head); find函数你可以不用,在主函数中将find函数也一起删掉就行了。函数实现将一个单向链表的结点倒置排列2011-05-06 15:58当时就毛了我|分类:数据结构及算法|浏览723次struct node* fun(struct node*head) Struct node *p,*q; If(head=NU

16、LL|_)return head; P=head;q=p-next; While(_) _; q-next=head; head=q;_; return head; 那几个空填啥,还有每一句的意思。分享到:2011-05-06 16:58提问者采纳以循环的第一趟为例进行讲解:structnode*fun(structnode*head)Structnode*p,*q;If(head=NULL|head-next=NULL)/只有链表为空或只有一个结点returnhead;P=head;/p从第1个结点起q=p-next;/q从第2个结点起,并且q几乎总在p的下一个结点位置while(q!=NU

17、LL)p-next=q-next;/第1个结点直接指向第3个结点q-next=head;/q作为新的首结点head=q;/head重新定位q=p-next;/p总是出现在p的下一个位置returnhead;补充程序:(1)head-next=NULL(2)q!=NULL(3)p-next=q-next(4)q=p-next示意图:用C+实现一链表,其中每个节点都是一个类。能实现插入、删除、查找等功能5满意答案PK放假4级2010-12-27class LinkNode/以一个int 举例public:LinkNode(int i ) node = new LinkNode(i);/嗯 这是精髓

18、所在int i;LinkNode *node;/起到牵尾巴的作用;template class Linklistprivate:/Vector l; 用Vector Container 方法就简单很多 因为里面有add.等等方法LinkNode *head;/纪录头;public:bool add(LinkNode *l);/关键就是LinkNode()构造函数有尾巴 ,因此可以不停地加结点bool del(LinkNode &l);/用删除的条件创建Node l ,遍历查找如符合条件则删除 并返回true;LinkNode *search(LinkNode *l,LinkNode &inde

19、x);/输入搜索条件index,如找到改结点的指针/another methods;补充:刚才的有误class LinkNode/以一个int 举例public:LinkNode(int i ) this.i = iint i;LinkNode *node;/起到牵尾巴的作用;template class Linklistprivate:/Vector l; 用Vector Container 方法就简单很多 因为里面有add.等等方法LinkNode *head;/纪录头;LinkNode *fence;public:bool add(LinkNode *l);/调用LinkNode构造函数

20、fence-node= new LinkNode(i);这没错了bool del(LinkNode &l);/用删除的条件创建Node l ,遍历查找如符合条件则删除 并返回true;LinkNode *search(T&index);/输入搜索条件index,如找到改结点的指针否则返回空/another methods;编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。zhanshi122|Lv3|被浏览18次|来自360安全卫士2013-06-26 7:201)建立一个带头结点的单链表。 (2)计算单链表的长度,然后输出单链表。 (3)查找值为x的直接前驱结点q。 (4)删

21、除值为x的结点。 (5)把单向链表中元素逆置(不允许申请新的结点空间)。 (6)利用(1)建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 (7)在主函数中设计一个简单的菜单,分别测试上述算法满意回答typedef int Elemtype; typedef int status; #define OVERFLOW -2 #define OK 1 #define ERROR -1 #include stdio.h #include stdlib.h typedef struct LNode Elemtype data; struct LNod

22、e *next; *linklist; /构造链表 void Create_Linklist(linklist &L) linklist p; p=(linklist)malloc(sizeof(LNode); if(!p) exit(OVERFLOW); L=p; L-next =NULL; /节点插入 void Insert_Linklist(linklist &L) linklist p; int n,i; printf(请输入插入节点的个数n: ); scanf(%d,&n); getchar(); for(i=n;i0;i-) p=(linklist )malloc(sizeof(L

23、Node); scanf(%d,&p-data); p-next=L-next ; L-next =p; /遍历输出并输出长度 status Visit_linklist(linklist &L) linklist p; int i=1; p=L-next ; if(L-next=NULL) return ERROR; while(p-next !=NULL) printf(%d ,p-data ); p=p-next ; i+; printf(%dn,p-data ); printf(长度为:%dn,i); return OK; /查找值为x的直接前驱结点q并输出 void Search_l

24、inklist(linklist &L) int x,k=0; linklist p=L,q; printf(输入x: ); scanf(%d,&x); getchar(); if(L-next =NULL) printf(该表为空 !n); while(p-next!=NULL) q=p; if(p-next -data =x) printf(%d ,q-data ); k=1; p=p-next ; if(p-next &p-data =x) printf(%d ,p-data ); k=1; if(k=0) printf(未找到值为%d的结点n,&x); printf(n); /删除节点

25、 status Delete_linklist(linklist &L) linklist p,q; int k=0,x; printf(请输入删除节点的值x: ); scanf(%d,&x); getchar(); if(L-next =NULL) return ERROR; p=L; q=L-next ; while(q!=NULL) if(q-data =x) k=1; p=q ; p-next =q-next ; free(q); q=p-next ; else p=q ; q=p-next ; if(k=0) printf(表中没有值为%d的结点!n,&x); return OK; /链表逆置 void Li

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1