指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0-9,然后做了一个char *p=ac,定义了*p的一个指针,p指向了ac数组的第一个单元.然后分别输出p和p+1的值,结果是差了1: #include <stdio.h> int main(void){ ,,,,,,,,,}; char *p = ac; printf("p =%p\n&…
如果我们通过函数的参数将一个数组传递到参数中去,那么在函数里接收到的是什么东西呢?我们知道如果传递一个普通变量,那么参数接收到的是值,如果传递一个指针变量,参数接收到的也是值,只不过这时的值是地址.那么数组是什么?将数组作为值传给一个函数,在函数的参数里有一个数组变量来接收这个数组,看下到底接收到数组变量的什么东西呢?以minmax作为例子来测试下: 在minmax函数中能不能计算出数组a的个数?在minmax和main中分别添加printf函数,从结果可以看出,在main里a的大小是68,而在…
指针应用场景一:交换两个变量的值 在学习函数时,交换两个数的值,做一个swap函数,传递值进去,也可以将两个值交换过来,没问题,可是离开swap就没有用了,为什么?因为传进去的是两个值. #include <stdio.h> void swap(int a,int b); int main(void) { ; ; swap(i,j); printf("i=%d,j=%d\n",i,j); ; } void swap(int a,int b){ int p; p=a; a=b…
在上一个blog学习了&运算符,使用&取了变量.数组等地址,有什么用那?如果能够将取得的变量的地址传递给函数,能否通过这个地址在函数内访问到外部这个变量?答案是肯定的,scanf("%d",&i)就是一个C语言的函数,另外我们试了,将地址交给一个整数,这个事情不靠谱,因为整数和地址不见得总是类型一致,那么什么样的类型可以接收取地址得到的地址那?指针! 指针的定义 指针类型的变量就是保存地址的变量,就是保存&运算符取得的其他变量的地址的一个变量:有int…
问题1:计算机遍布生活的各个方面,若你需要一个功能可以下载APP,我们需要的大部分功能都可以找到对应的APP,如果没有可以自己写一个软件,但是很少人需要这么做,那么我们为什么学习计算机编程语言? 学习语言重要的不是写软件而是1)通过学习语言去理解计算机是如何工作的?2)计算机擅长做什么?能够做什么?擅长做什么?不能够做什么? 问题2:计算机是如何解决问题的? 比如你在餐馆,想要一杯水.那么如果你跟一个服务员交流,只需要告诉服务员:"请给我一杯水",那么服务员知道怎么打一杯水给你,他会去…
结构数组: 和C语言中的int,double一样,一旦我们做出一个结构类型,就可以定义这个结构类型的变量,也可以定义这个结构类型的数组.比如下面这个例子: struct date dates[100]; struct date dates[] = {{4,5,2005},{2,4,2005}}; dates[100]是一个结构数组,其中每个元素是date结构的变量.对dates初始化的时候就需要两层括号,外层大括号是说初始化dates这个数组,里面的每个大括号都是一个数组元素,比如{4,5,20…
结构作为函数参数: 声明了一个结构就有了一种自定义的数据类型,这个数据类型和int.float.double一样,int等基本类型可以作为函数的参数,那么这种个自定义的结构类型也应该可以作为函数参数,比如: int numberofDays(struct date d):函数numberofDays的参数就是一种结构变量. 整个结构是可以作为参数的值传入函数的,这时是在函数内新建一个结构变量,并复制调用者的结构的值,这和数组是完全不一样的.结构除了可以作为参数,也可以作为返回值,例如下述程序中,…
定义结构: 在程序里,如果想要表达一个数据就需要一个变量,而每个变量又都需要一个类型,之前学过C语言中有int.double.float.char等这些基础类型,还有指针.数组等.如果你要表达的数据比较复杂,不是一个值,比如你要表达日期,有年月日三个值,要表达时间,有时分秒三个值,要表达一个人可能需要姓名.学号等一堆数据,但是又想要一个整体表达这么多数据,这时就需要C语言中一种特殊的东西,叫做结构! 一个结构就是一个复合的数据类型,里面有各种数据类型的成员,然后用一个变量来表达那么多的数据.比如…
字符串的赋值 字符串的输入与输出 对C语言的基础类型,比如int.double等类型,scanf.printf有专门的格式转换,而对字符串,scanf.printf使用%s格式字符进行输入与输出.当使用scanf进行读一个字符串的时候,读到什么东西,读到什么位置为止是很微妙的,试一下: #include <stdio.h> int main(void){ ]; scanf("%s",word); printf("%s##\n",word); ; } 程序…
C语言中字符串的定义 如果定义一个字符数组word,并使用大括号对其初始化,如下图所示: 但是这个不是C语言的字符串,只是字符数组,不是字符串,因为不能使用字符串的方式进行计算.那么C语言的字符串长什么样呢?如下图所示: 那么上述两个定义有何区别呢?区别就是C语言字符数组初始化时的最后一个字符加入了一个特殊的东西,就是'\0',这个符号的意思就是整数0,这里去掉单引号和斜杠,只放0也是可以的.这个字符数组总共有7个元素,最后的这个0使得这个数组就是C语言的字符串,那么这个字符串就可以使用c语言字…
使用devC++写hello world 第一步:文件-新建-源代码.然后输入"输出hello world"程序: 注意:写程序时关闭中文输入法,否则语句输入的分号可能会被识别为错误.除了printf外,剩余的代码叫做程序框架,是我们后面所有的程序都需要的. 第二步:保存时注意修改保存类型,devc++默认是C++文件,需要修改为C. 第三步:类似魔方的小方块的编译,运行或者编译+运行:或者运行菜单项下的运行.编译:或者F9快捷键.运行时会弹出小黑框,这是程序运行看结果的地方,这个小黑…
<>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./test > 12.out //将运行结果写入文件12.out more 12.out //查看 cat > 12.in //将终端内容输入12.in ./test < 12.in //运行test,输入为文件12.in ./test < 12.in > 12.out //输入为文件…
关于C语言如何做文件和底层操作: 文件操作,从根本上说,和C语言无关.这部分的内容,是教你如何使用C语言的标准库所提供的一系列函数来操作文件,最基本的最原始的文件操作.你需要理解,我们在这部分所学习的,是函数库的使用,而非C语言.顺便我们还学习了很多和计算机相关的知识,比如重定向.文本文件和二进制文件的江湖恩怨.但是既然不是C语言,也就意味着你将来的工业环境下,未必还会使用这么原始的文件操作函数了.这些函数,只是一个标本,让你知道可以这样来操纵文件.但是,不见得所有的库都是以这样的方式来操纵文件…
typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个叫做typedef的功能来声明一个已有的数据类型的新名字,typedef也是个关键字,比如: typedef int Length; 意思是Length是int类型的别名,可以代表int.在程序的变量定义或者参数声明时,如果出现Lenght就是表示int: Length a,b,len; Lengt…
枚举类型的定义 用符号而不是具体的数字来表示程序中的数字,这么表示的好处是可读性,当别人看你的程序,看到的是单词,很容易理解这些数字背后的含义,那么用什么符号来表示名字哪?需要const int常量的整数,不可修改的整型的变量.大家看下面的程序,0,1,2使用red,yellow,green代替,那么程序中就使用red,yellow,green而不是0,1,2: #include <stdio.h> ; ; ; int main(int argc,char const *argv[]){ ;…
知识点1:众多编程语言,为何选择C? 现在我们的同学喜欢java,也参加很多java的培训班,java是比较热门,但是C语言在工业界依然有重要的地位,在很多领域无可替代,几乎所有和硬件打交道的地方都得要用C语言,比如再工业界大量实用的linux操作系统,几乎都是C语言编写的. 至于编程语言的热度,参考TIOBE编程语言排行榜http://www.tiobe.com/tiobe-index// 的三张图:   2017年2月份最新数据,C语言第二.每个月都会有新的数据出来. 2002年到现在15年…
目录 第七周:指针与字符串 7.1 指针初步 7.2 字符类型 7.3 字符串 7.3 课后练习 第七周:指针与字符串 7.1 指针初步 sizeof 是一个运算符,给出某个类型或变量在内存中所占据的字节数 sizeof(int) sizeof(i) 运算符 & scanf("%d",&i); 获得变量的地址,它的操作必须是变量 int i;printf("%p",&i); 地址的大小与int是否相同取决于编译器,地址和整数不一定是相同的,这…
由于看这个慕课的时候已经结课了,没有办法提交查看代码是否正确...先保存一下,以后再提交改错 欢迎批评指正! 题目链接:https://www.icourse163.org/learn/ZJU-1001542001#/learn/ojhw?id=1004600071 题目详情: 题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要提供以下的功能: d…
1 时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小于10,则没有千位部分:如果小时是0,则没有百位部分:如果小时不是0而分小于10分,需要保留十位上的0:如果小时是0而分小于10分的,则不需要保留十位上的0.如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分. 有效的输入范围是0到2359,即你的程序不可能从…
1 素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 输入格式: 两个整数,第一个表示n,第二个表示m. 输出格式: 一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 输入样例: 2 4 输出样例: 15 时间限制:500ms内存限制:32000kb   个人解答(OJ已验…
1 奇偶个数(5分) 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数. 输入格式: 一系列正整数,整数的范围是(0,100000).如果输入-1则表示输入结束. 输出格式: 两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数.两个整数之间以空格分隔. 输入样例: 9 3 4 2 5 7 -1 输出样例: 4 2 时间限制:500ms内存限制:32000kb     个人解答(OJ已…
1 逆序的三位数(5分) 题目内容: 逆序的三位数: 程序每次读入一个正三位数,然后输出逆序的数字.注意,当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 提示:用%10可以得到个位数,用/100可以得到百位数....将这样得到的三个数字合起来:百位*100+十位*10+个位,就得到了结果. 注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能.这道题目要求输出逆序的数字,程序就只能输出这个数字,除此之外任何内容都不能输出. 输…
1 输出“Hello World”(5分) 题目内容: 请输出一行,内容为 Hello World 请注意大小写. 由于这一周只是简单地介绍了C程序的基本框架,还不能做很多事情,甚至还不能做数据的输入,所以这一周的题目也非常简单. 第二周会仔细介绍如何在中M和拼题A做题,如果你一时无法搞定如何提交这周的作业,没关系,可以先在在线编程环境或IDE中做好程序,下周学过之后再来提交作业.我们所有的作业的截止时间都是到2018年12月31号晚上.所以,你可以慢慢来,一点点能跟上来就可以了.   输入格式…
定义数组 ●<类型>变量名称[元素数量]; ● int grades[100]; ●double weight[20]; ●元素数量必须是整数 ●C99之前:元素数量必须是编译时刻确定的字面量 ●是一种容器(放东西的东西) ●其中所有的元素具有相同的数据类型: ●一旦创建,不能改变大小 ●*(数组中的元素在内存中是连续依次排列的) ●可以出现在赋值的左边和右边  数组的单元 ●数组的每个单元即使数组类型的一个变量 ●使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数(下标从0开始计数时…
什么是函数? 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值. 可以先想象成数学中的函数: y=f(x) 例如 求begin到end和的函数定义 void sum(int begin, int end) // void 为返回类型(不返回任何东西) sum 为函数名 (int begin, int end)为参数表) { int i; int sum; ;i<=end;i++){ sum +=i; } printf("%d到%d的和是%d\n",begin,…
1.时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小于10,则没有千位部分:如果小时是0,则没有百位部分:如果分小于10分,需要保留十位上的0.如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分. 有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据. 你的程序要输出这个时间…
温度转换(5分) 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度. 程序的输入是一个整数,表示华氏温度.输出对应的摄氏温度,也是一个整数. 提示,为了把计算结果的浮点数转换成整数,需要使用下面的表达式: (int)x; 其中x是要转换的那个浮点数. 注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能.这道题目要求转换后的数字,程序就只能输出这个数字,除此之外任何内容都…
static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象的初始化是在mian函数运行之前被初始化的,而且是没有顺序的,如果多个静态变量.对象有依赖顺序,最好定义在同一个文件中,或者直接不要这么做. c中: static主要定义全局.局部静态变量以及定义静态函数:全局静态变量和全局局部变量其实是一样的,可以统称为静态变量,注意:局部变量在第一次进这个函数时…
2019-1-2 翁恺老师C入门视频-启程 代码详见GitHub: 目录 第0周:程序设计与C语言 第1周:计算 第2周:判断 第3周:循环 第4周:循环控制 第5周:数据类型 第6周:函数 第7周:数组 第8周:指针与字符串 第0周:程序设计与C语言 [学习总结]C-翁恺老师-入门-第0周 第1周:计算 第2周:判断 第3周:循环 [学习总结]C-翁恺老师-入门-第3周 第4周:循环控制 [学习总结]C-翁恺老师-入门-第4周 第5周:数据类型 第6周:函数 第7周:数组 第8周:指针与字符串…
c++语言比较复杂,学习起来相对难一些,加之特性繁多,很难全部掌握:特别是工作几年之后,每次温故都有很大的收获,之前不懂的地方随着工作的积累和重新的学习,都会慢慢的解开,当然我现在还是很菜... 之所以想写一系列学习笔记是因为b站上发现了一期很棒的c++讲解视频(翁凯-面向对象程序设计-C++),印象最深的一句话是:“c++是在c的基础之上,新增了一些特性,当你想要深入的理解这个特性背后的原理,你要去思考怎么用c来实现,如果你知道它是怎么用c实现的,那么你就掌握这个新特性”,翁恺老师的视频之所以…