user-0 提问: 希望大家能提c的问题能把我考住

回复:
user: user-0
content: 引用 83 楼 bluesen 的回复:“你只不过是dos年代的老家伙”，贴主这口气有点大，牛皮哄哄，我看也就是个笑话。  让大家看笑话了。本来技术论技术，没必要扯其它的，告诉他的程序运行不起来，而且原理也分析了，他要说我无知者无畏、有眼无珠等，我还能有什么好的口气，他的代码如果能在windows或linux上成功实现改代码跑起来，欢迎大家告诉我

user: user-1
content: “你只不过是dos年代的老家伙”，贴主这口气有点大，牛皮哄哄，我看也就是个笑话。

user: user-2
content: 引用 78 楼 williamhong 的回复:[quote=引用 77 楼 zhao4zhong1 的回复:] [quote=引用 74 楼 williamhong 的回复:] [quote=引用 73 楼 zhao4zhong1 的回复:] [quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！[/quote] 我那个帖子里贴的就是成功的代码。可惜你有眼无珠。[/quote]  引用 77 楼 zhao4zhong1 的回复:[quote=引用 74 楼 williamhong 的回复:] [quote=引用 73 楼 zhao4zhong1 的回复:] [quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！[/quote] 我那个帖子里贴的就是成功的代码。可惜你有眼无珠。[/quote] 你的代码是在windows底下可以运行还是可以在linux底下运行？告诉你出来dos，不可能！你只不过是dos年代的老家伙，讲过了，不再说。 [/quote] 道不同不相为谋。别了不再见了此贴以及此人。

user: user-3
content: 牛逼，膜拜！

user: user-0
content: 引用 88 楼 arthuryangsh 的回复:[quote=引用 39 楼 williamhong 的回复:] [quote=引用 30 楼 arthuryangsh 的回复:] 试试这个：用C来实现对象的封装，封装对象的变量和方法。进一步的，可以考虑继承的实现。 面向对象其实是个利器，但C也可以实现类似的操作，就是繁琐一点。 或者，在4KB的内存上实现线程调度和内存分配。  继承、封装、多态本身就是垃圾，这个应该在10年内会有定了的，这些东西无非多了张指针表而已，软件的所有问题都用间接方式实现[/quote]  其实我心中是赞成你这个观点的。但在实践中，继承封装和多态确实提高了劳动效率，这不是能不能实现的问题。这论坛上很多人都是纸上谈兵，看起来都没试过一个比较庞大的程序如何架构、维护和进化的。即使没有这些垃圾，我们自己还是会制造类似的封装，只是没他们这样精巧。[/quote]  继承是破坏封装的，更倾向于面向组件技术而不是面向对象技术

user: user-4
content: 引用 39 楼 williamhong 的回复:[quote=引用 30 楼 arthuryangsh 的回复:] 试试这个：用C来实现对象的封装，封装对象的变量和方法。进一步的，可以考虑继承的实现。 面向对象其实是个利器，但C也可以实现类似的操作，就是繁琐一点。 或者，在4KB的内存上实现线程调度和内存分配。  继承、封装、多态本身就是垃圾，这个应该在10年内会有定了的，这些东西无非多了张指针表而已，软件的所有问题都用间接方式实现[/quote]  其实我心中是赞成你这个观点的。但在实践中，继承封装和多态确实提高了劳动效率，这不是能不能实现的问题。这论坛上很多人都是纸上谈兵，看起来都没试过一个比较庞大的程序如何架构、维护和进化的。即使没有这些垃圾，我们自己还是会制造类似的封装，只是没他们这样精巧。

user: user-0
content: 引用 85 楼 layershow 的回复:[quote=引用 84 楼 williamhong 的回复:] 让大家看笑话了。本来技术论技术，没必要扯其它的，告诉他的程序运行不起来，而且原理也分析了，他要说我无知者无畏、有眼无珠等，我还能有什么好的口气，他的代码如果能在windows或linux上成功实现改代码跑起来，欢迎大家告诉我  OK，我就是来捣蛋的， 原帖我去看了，里面的代码主要的意思就是通过设置 .text 段可写来操作， 现如今操作系统都运行于保护模式，实际上任何物理内存可以被重复映射，因此段页式的管理也只是属性问题 Linux 有一个函数叫 mprotect 看名字大概也了解其意思  mprotect 要求页对齐的地址 p 根据 PAGE_SIZE 可以获得页对齐的地址，Linux 通常是 4k  int page_size = sysconf(_SC_PAGE_SIZE); char * page_addr = (char *)((int)p & (~page_size - 1));  设置其可读写、可执行 mprotect(page_addr, page_size, PROT_WRITE | PROT_READ | PROT_EXEC);  mprotect 成功之后，地址所在页可写[/quote]  用这个应该可以，可以写个例子试试

user: user-5
content: 好像写错了，(~page_size - 1) 应该是先 - 1 (~(page_size - 1)) 手敲的，对不住了

user: user-5
content: 引用 84 楼 williamhong 的回复:让大家看笑话了。本来技术论技术，没必要扯其它的，告诉他的程序运行不起来，而且原理也分析了，他要说我无知者无畏、有眼无珠等，我还能有什么好的口气，他的代码如果能在windows或linux上成功实现改代码跑起来，欢迎大家告诉我  OK，我就是来捣蛋的， 原帖我去看了，里面的代码主要的意思就是通过设置 .text 段可写来操作， 现如今操作系统都运行于保护模式，实际上任何物理内存可以被重复映射，因此段页式的管理也只是属性问题 Linux 有一个函数叫 mprotect 看名字大概也了解其意思  mprotect 要求页对齐的地址 p 根据 PAGE_SIZE 可以获得页对齐的地址，Linux 通常是 4k  int page_size = sysconf(_SC_PAGE_SIZE); char * page_addr = (char *)((int)p & (~page_size - 1));  设置其可读写、可执行 mprotect(page_addr, page_size, PROT_WRITE | PROT_READ | PROT_EXEC);  mprotect 成功之后，地址所在页可写

user: user-2
content: 引用 54 楼 williamhong 的回复:[quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！

user: user-0
content: 引用 77 楼 zhao4zhong1 的回复:[quote=引用 74 楼 williamhong 的回复:] [quote=引用 73 楼 zhao4zhong1 的回复:] [quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！[/quote] 我那个帖子里贴的就是成功的代码。可惜你有眼无珠。[/quote]  你和我这样的高手说话才是自取其辱呢

user: user-0
content: 引用 79 楼 super_admi 的回复:我提的问题是：哪些C的问题能把你考住呢？  c specification

user: user-6
content: 好吧，加油！！

user: user-7
content: 我提的问题是：哪些C的问题能把你考住呢？

user: user-0
content: 引用 77 楼 zhao4zhong1 的回复:[quote=引用 74 楼 williamhong 的回复:] [quote=引用 73 楼 zhao4zhong1 的回复:] [quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！[/quote] 我那个帖子里贴的就是成功的代码。可惜你有眼无珠。[/quote]  引用 77 楼 zhao4zhong1 的回复:[quote=引用 74 楼 williamhong 的回复:] [quote=引用 73 楼 zhao4zhong1 的回复:] [quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！[/quote] 我那个帖子里贴的就是成功的代码。可惜你有眼无珠。[/quote] 你的代码是在windows底下可以运行还是可以在linux底下运行？告诉你出来dos，不可能！你只不过是dos年代的老家伙，讲过了，不再说。

user: user-2
content: 引用 74 楼 williamhong 的回复:[quote=引用 73 楼 zhao4zhong1 的回复:] [quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！[/quote] 我那个帖子里贴的就是成功的代码。可惜你有眼无珠。

user: user-0
content: 大家继续，不要因为有些人打岔

user: user-0
content: 引用 73 楼 zhao4zhong1 的回复:[quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote]  我无畏啥，你只不过是dos年代的老家伙，早就被淘汰了

user: user-0
content: 引用 73 楼 zhao4zhong1 的回复:[quote=引用 54 楼 williamhong 的回复:] [quote=引用 53 楼 zhao4zhong1 的回复:] [quote=引用 42 楼 williamhong 的回复:] [quote=引用 40 楼 zhao4zhong1 的回复:] [quote=引用 33 楼 williamhong 的回复:] [quote=引用 13 楼 zhao4zhong1 的回复:] 楼主确定不是riwei的马甲？ http://bbs.csdn.net/topics/390627329 http://bbs.csdn.net/topics/390084943 不是马甲 改代码没有意义，而且你改的也不是代码[/quote] 你知道“代码”和“代码段内代码对应汇编指令”的区别吗？[/quote]  机器只认机器指令，也就我们说的汇编，编译之后就不再存在所谓的源程序级的代码了，也没有改代码的概念，我只能认为你想改机器指令，大多数高级操作系统不允许改的，所以改没有意义，而且你改的也不是，如果真改成功了，也许你还活在dos年代或者在用某些单片机之类的[/quote] 说到底你连我改没改成功都吃不准啊！[/quote] 失败是肯定的，除非用dos[/quote] 无知者无畏！[/quote] 你什么东西吗，有本事把你成功的代码贴出了！

user: user-8
content: 引用 70 楼 williamhong 的回复:[quote=引用 69 楼 user-8 的回复:] [quote=引用 67 楼 williamhong 的回复:] [quote=引用 66 楼 user-8 的回复:] [quote=引用 62 楼 williamhong 的回复:] [quote=引用 61 楼 user-8 的回复:] #include<stdio.h> #include<malloc.h> #define LEN sizeof(struct student) #define NULL 0 struct student {   int number;   struct student *next; };   int n=0;  struct student *creat(void) { 	struct student *head,*p1,*p2; 	head=NULL; 	p1=p2=(struct student *)malloc(LEN); 	scanf("%d",&p1->number); 	while(p1->number!=0) 	{ 		n++; 		if(n==1) head=p2; 		else p2->next=p1; 		p2=p1; 	    p1=(struct student *)malloc(LEN); 		scanf("%d",&p1->number); 	} 	p2->next=NULL;     return head; }   struct student *cha(struct student *head,struct student p0) {     struct student *p1=head,*p2; 	if(p0.number<=p1->number) 	{ 		head=&p0; 		p0.next=p1; 		return head; 	} 	else 		while(p1->next!=NULL) 		{ 			p2=p1; 			p1=p1->next; 			if(p0.number<=p1->number) 			{ 				p2->next=&p0; 		        p0.next=p1; 				return head; 			} 		} 		p1->next=&p0; 		p0.next=NULL; 		return head; }   void print(struct student *p) { 	if(p==NULL) 	printf("0");     else 	while(p!=NULL) 	{ 		printf("%d",p->number); 	    p=p->next; 	}  }  void main() { 	int x;     struct student *p; 	p=creat();     struct student p0; 	scanf("%d",&x); 	p0.number=x;     p0.next=NULL; 	p=cha(p,p0); 	print(p); }  谭浩强的一道题。插入一个链表结点（按number，由大到小）。插入程序正确，但是输出程序有误。无限循环。一直找不到原因  目测malloc之后没有把next置为NULL[/quote] 我用单步调试看了一下。倒数第二行printf（p）之前都没问题。到了执行printf时，出错。大神求助。我已经卡了一个下午了[/quote]  我不能帮你调程序，不过按我说的，malloc语句之后竟跟着加一条p1->next=NULL; [/quote] 那最后问你一个问题。 建立一个链表结点stuct student A； 如果单独的A。代表什么含义？[/quote] stuct student A; 定义一块内存，里面有两个元素[/quote]谢谢