`
haierboos
  • 浏览: 439114 次
文章分类
社区版块
存档分类
最新评论

在某培训机构的听课笔记

 
阅读更多

某实训机构有些小坑,听课加反省就当作对C语言的一种补充吧,哎~~~~,记录给自己看看。

1.int a=9,b=10,d=9;是可以的。

2.%*d ,在scanf中使用的时候,是1整数但不赋给任何变量,有个小代码:

#include <stdio.h>
#include <malloc.h>

int main()
{
	int a=23,b=5,c=9;
	scanf("%*d%d%d",&a,&b,&c);
	printf("%d,%d,%d",a,b,c);
	return 0;
}

a的值,你是赋值不进去的,仅仅占位用的。

3.对于冒泡排序,怎么在不完全执行完循环前就预先判断,已经排序结束了:

在一次内层循环的时候,一次都没有进行数据交换,就说名冒泡排序已经排序ok了。

4.不要总记得scanf,同样还存在getchar()和gets()函数,gets能接收含有空格的字符串,这个是scanf不能做到的。

scanf("%ls",a); //接收有效字符串的第一个字符

scanf("%ns",a); //这个是格式化输入,接收字符串的从头开始的n个字符

其实我想说,scanf函数真心没有什么用,很不好的一个函数。

5.堆区分配内存是从两头开始增长的,不是单向增长的。

6.typedef int [10] 其实[10]就是int了,个人觉得这个代码风格,很不好,千万不能写成这样,可读性很差!

7.要记住函数在传递参数的时候,其实是数据的拷贝,直接对形参进行改变或者赋值,是毫无意义的,实参是不会改变的。对于指针也是一样的。只有通过指针,取得了当前这个指针指向的内容的时候,改变了这个内容,这样实参才会被改变。因为是直接改变了内存地址中保存的数值。

举个例子就是:在数据结构那节中的链表,creat函数就是一个典型的例子。仔细想想为什么不能在main函数中定义一个头结点,再把这个头结点的地址传给creat函数呢?一定要通过creat返回一个头结点指针呢?再想想,为什么在想通过形参获得子函数中数据的时候,一定要传入地址或者指针呢?然后再把想要获得数据,写入这个地址或者指针中去?

给一段代码,帮助理解这个问题:

#include <stdio.h>
#include <malloc.h>
typedef struct _tag_str
{
	int a;
	int b;
}str;
void fun(str* str1)
{
	str1 = (str* )malloc(sizeof(str));
	str1->a = 12;
	str1->b = 34;
}
int main()
{
	/*str* strp;
	fun(strp);
	printf("%d\n",strp->a);
	printf("%d\n",strp->b);*/
	str str1;
	fun(&str1);
	printf("%d\n",str1.a);
	printf("%d\n",str1.b);
}

想想,为什么子函数中赋值,在main中打印出来是不一样的!!!
对于fun(strp)的过程是这样的:在函数传递参数的时候,strp的值 赋值给了子函数的str1,这个过程就是函数参数拷贝的过程,然后str1的值在malloc的时候不幸被malloc改变了,所以在main中打印出来的不一样。

对于fun(&str1)的过程是这样的:在函数传递参数的时候,&str1的值 赋值给了子函数的str1,后面的过程跟上面一样。所以在main中打印的也是不一样的。

对于这种情况,最好的解决办法就是利用函数返回值,把str1返回 回来就ok了!!!

注意:可能你会问了,那怎样通过参数获得子函数传递的值啊,其实很简单,你在main中开辟好一段内存,然后把这个内存地址传递到子函数中去,然后对这个内存进行赋值,不要去改变这个指针的指向(即指针的值),仅仅改变指针指向的内存(即指针指向的内容),自然就获得了你想要的值!

8.c语言文件操作的一个问题:

c语言中打开文件有两种方式,一种是二进制方式,另一种是文本方式(ASCII码方式)。这两种方式有什么区别?(对于Linux这种只有一种文件类型的操作系统来说是没有区别的)

我们就以windows为例说说区别:

a.以文本方式打开文件,若将数据写入文件,如果遇到换行符'\n'(ASII 值为10,0A),则会转换为回车—换行'\r\n'(ASCII值为13,10,0D0A)存入到文件中,同样读取的时候,若遇到回车—换行,即连续的ASCII值13,10,则自动转换为换行符。

而以二进制方式打开文件时,不会进行这样的处理。

b.还有如果以文本方式打开文件时,若读取到ASCII码为26(^Z)的字符即0x1a,则停止对文件的读取,会默认为文件已结束,而以二进制方式读取时不会发生这样的情况。由于正常情况下我们手动编辑完成的文件是不可能出现ASCII码为26的字符,所以可以用feof函数去检测文件是否结束。

所以,由于存在上面的两个区别,我们在明确文件类型的时候,最好使用相对应的方式对文件进行打开。对于那些不明确文件类型的时候,最好使用二进制方式打开文件。

分享到:
评论

相关推荐

    cisco学习笔记(思科官方的培训机构里弄出来的)

    OSPF在NBMA中的五种网络类型.doc ospf在各种网络类型中 OSPF特殊区域.doc OSPF认证.doc RIPv1关于学习不同子网掩码的小实验.doc RIPv2offset-list.doc RIPv2认证和触发更新.doc RIPv2通过通告邻居单播更新跳过路由....

    MFC培训笔记

    自己在培训机构的课堂笔记 对于刚接触MFC的新手来说 会有很大的帮助

    Linux课堂笔记及练习题和答案.zip

    2万多块钱的培训机构的课堂笔记,老师总结的所有Linux笔记,里面还有80多道python练习题,如果你想学好python,就应该下工夫多看笔记,多敲练习题,双重练习,对你的帮助真的很大

    java课堂笔记_自己总结的

    这里是我06.09到07.02期间,在西安itfuture培训机构学习的完毕时候整理的笔记! 主要内容: 1:基本sql语句,sqlserver和mysql的操作 2:java基础,从最基本的数据类型到数据结构,容器线程。 3:jsp...

    pmp.xmind 项目管理知识体系指南(PMBOK指南)第六版阅读笔记(xmind格式)

    PMBOK指南(项目管理知识体系)第六版思维导图笔记 结合...可以参考我上传的另外一个课堂笔记 十大知识领域课堂笔记(xmind格式)主要是每个知识领域的输入输出以及数据流程。这个需要一定的基础,可以用作复习使用。

    JSP学习笔记

    JSP学习笔记,在培训机构学习后的课堂笔记的整理,包含学习中遇到的问题。

    达内2011年JAVASE(笔记)

    达内机构2011年培训学生课堂上做的笔记,对自学的学生有极大帮助!!

    仿网易云课堂整站源码 可二次开发源码下载 微厦在线教育社区版

    微厦在线教育系统面向个人、学校、培训机构的在线教育建站系统。系统包含了多终端切换学习,一步全搞定、流畅视频点播、师资管理系统、教师点评以及学员互动各种课程的营销模式、在线云直播、笔记、题库试卷系统、...

    KesionEDU在线网校系统 v6.0.181212

    KESION 在线网校系统面向个人、学校、培训机构及企业用户的在线教育建站系统。系统包含了多终端切换学习,手机网站、微网校、APP应用一步全搞定、流畅视频点播、师资管理系统、教师点评以及学员互动‘各种课程的营销...

    企业内训系统2021版|员工在线学习平台|适合企事业单位及机关部门内部在线培训考试平台搭建

    为高校,集团单位,医院,军队,出版社以及各类教育培训机构提供在线培训考试服务。 【功能介绍】 在线点播:视频学习,图文资料,课件上传,学习进度统计,学习卡开课等,移动学习随时随地,云课堂+云存储,高...

    KesionEDU 在线网校系统 v6.0.181212.zip

    KesionEDU 在线网校系统面向个人、学校、培训机构及企业用户的在线教育建站系统。系统包含了多终端切换学习,手机网站、微网校、APP应用一步全搞定、流畅视频点播、师资管理系统、教师点评以及学员互动‘各种课程的...

    EduSoho网校系统 V8.2.25

    EduSoho网校系统是面向学校、培训机构及企业用户的友好、开源、高性价比的在线教育建站系统。EduSoho提供在线教学、网校管理、云视频点播、直播、移APP等功能,为使教育机构能够以最低成本开展在线教学活动,EduSoho...

    KesionEDU在线网校系统-.net

    先后协助超过10万家的教育培训机构、企业、学校等做线上教育转型。而V8产品我们从教育OMO理念出发,融合更多的线上线下教育结合功能体系,将会是一个划时代教育产品。V8 将不仅是教育工具,如果您有好的课程没有好的...

Global site tag (gtag.js) - Google Analytics