c语言

c语言之简单可变参数实例

南楼画角 提交于 2020-03-10 20:27:17
#include<stdio.h> #include<stdarg.h> int sum(int n,...); int main() { int result; result = sum(3,1,2,3); printf("result=%d\n",result); return 0; } int sum(int n,...) { int i,sum=0; va_list vap; va_start(vap,n); for(i=0;i<n;i++) { sum +=va_arg(vap,int); } va_end(vap); return sum; } 简单了解一下先 来源: CSDN 作者: 奔跑吧_自己 链接: https://blog.csdn.net/qq_38721302/article/details/104775699

C语言报错:error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token|

浪子不回头ぞ 提交于 2020-03-10 20:18:53
C语言写代码的时候碰到问题: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘ attribute ’ before ‘{’ token| 检查了很长时间什么都没发现,网上看大家出现这个错误有很多原因。希望以后不用再给自己补充。 报错原因: 语法错误,缺少了一些必要的符号。 报错代码: 这里是函数声明忘记了分号。 # include <stdio.h> # include <stdlib.h> # include <math.h> void money ( int year , int loan , float rate ) int main ( ) { int n , loan ; float rate ; printf ( "Input loan:" ) ; scanf ( "%d" , & loan ) ; printf ( "Input rate:" ) ; scanf ( "%f" , & rate ) ; for ( n = 5 ; n <= 30 ; n ++ ) money ( n , loan , rate ) ; return 0 ; } void money ( int year , int loan , float rate ) { int loan , month ; month = year * 12 ; money =

C语言笔记(十七)——sizeof()、strlen()与str.length()

╄→尐↘猪︶ㄣ 提交于 2020-03-10 12:20:22
求数组长度: 1、sizeof()关键字: 根据sizeof ()关键字可以获得参数(数组、指针、 数据类型、对象或者函数 )在内存中 所占的字节数 ,所以数组所占总的字节数除以一个元素所占的字节数就是数组的长度。如下代码所示,数组 a 是 int 型的,每个元素占 4 字节,所以长度为 10 的数组在内存中所占的字节数就是 40。而总的字节数除以一个元素所占的字节数就是数组的长度,如下面这个程序: # include <stdio.h> int main() { int a[10] = {0, 3, 5, 6, 9}; int cnt = sizeof(a) / sizeof(int); printf("cnt = %d\n", cnt); return 0; } 运行结果: 注意1 :在 给出数组大小 后,sizeof 求 出的是 数组的总长度 ,而不是数组中存放的 有意义的数据 的个数 。 可以采用 不给数组大小 的方法来避免这个问题,比如下例中的数组b: # include <stdio.h> int main() { int a[10] = {0, 3, 5, 6, 9}; int b[] = {1,3,5,4}; int cnt = sizeof(a) / sizeof(int); int cnt1 = sizeof(b) / sizeof(int); printf(

C语言 malloc()、memcpy()、free()等

▼魔方 西西 提交于 2020-03-10 08:54:06
1、malloc()函数: void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针, 否则返回空指针NULL。 当内存不再使用时,应使用 free() 函数将内存块释放。 malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的,申请的内存是连续的 。 返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。 malloc 函数返回的是 void * 类型,C++:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。 所以必须通过 (int *) 来将强制转换 。 C是能通过编译,不会报错。 规范的程序: (检查返回值是否不是NULL,不检查若申请分配失败便造成 内存泄漏 ) type *p; if(NULL == (p = (type*)malloc(sizeof(type)))) /*请使用if来判断,这是有必要的*/

C语言_学习笔记_(三)判断与循环

吃可爱长大的小学妹 提交于 2020-03-10 05:58:04
一、判断 根据比较的结果,决定做、还是不做某些动作,就要用到if语句。 一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号“{}”之间的若干条语句。如果表示条件的逻辑表达式的结果为true,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的其他语句。 计算机的智能是建筑在规则的基础上的,在遇到情况的时候,根据事先制定的规则做出判断,是计算机最基本的能力。 能做判断的基础,是能对数据做比较,比较就是关于两个数据是否相等、谁大谁小的结论,这需要用到关系运算:对两个数据之间的关系的计算。 C语言提供了六个关系运算符: 相等== 不相等!= 大于> 大于等于>= 小于< 小于等于<= 注意其中有两个字符的运算符:==、>=和<=的两个字符必须紧紧连在一起,中间不能插入空格。 关系运算的结果是一个逻辑值,逻辑值只有两种可能的值:true(真,表示成立)或false(假,表示不成立)。当两个值的关系符合关系运算符的预期时,关系运算的结果为true,否则为false。 所有的关系运算符的优先级比算术运算的低,但是比赋值运算的高。 判断是否相等的==和!=的优先级比其他的低,而连续的关系运算是从左到右进行的。 二、循环 if语句可以判断条件是否满足,满足时才做相应的动作,而循环语句可以在满足条件时,不断地重复执行一些动作。

113. 路径总和 II (C语言)

谁说胖子不能爱 提交于 2020-03-10 05:28:13
113. 路径总和 II (C语言) 用例1 :[1,0,1,1,2,0,-1,0,1,-1,0,-1,0,1,0] 2 用例2 :[-2,null,-3] -5 temp[i++]=root->val;//开始用 path[*returnSize][i++]在用例1 中会出错,path[0][0]=1,path[0][1]=0。但是在回溯过程中,paht[1][0]没有被赋值。 // else if(n>sum){ // printf("break,root->val=%d,i=%d\n",root->val,i);//希望可以剪枝,但是这会在第二个用例中出错,在数字为负数时,会出错的,n=-5, 数值-2 一进来就返回了 // return false; // } /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. * Note:

c语言寒假作业01

若如初见. 提交于 2020-03-09 21:52:51
问题|答案 -|:--:|- 这个作业属于哪个课程|c语言设计1 这个作业要求在哪| https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10260 我在这个课程的目标是|gitee 与 git基础命令学习与使用 作业正文| https://www.cnblogs.com/limeijuan/p/12450523.html 参考文献|百度文库 来源: https://www.cnblogs.com/limeijuan/p/12450523.html

结合c语言浅谈栈帧技术

懵懂的女人 提交于 2020-03-09 21:50:49
有关函数调用机制和栈帧,借助一段代码说明 # include <stdio.h> long add ( long a , long b ) { long x = a , y = b ; return ( x + y ) ; } int main ( ) { long a = 1 , b = 2 ; printf ( "%d\n" , add ( a , b ) ) ; return 0 ; } 在此之前,我们先提一下栈。 栈 是一种数据结构,它的特点是“先进后出” ,看图: 这时候有两个东西要介绍一下, EBP 和 ESP 。这是寄存器的两个区域,暂时把他们理解成指针。简单说,EBP始终指向栈底,ESP始终指向栈顶。 大致知道栈长什么样了,接下来介绍正题 程序在运行时会把c语言转换成汇编代码,再转换成机器码,我们现在用汇编代码看看调用函数时计算机究竟干了什么。我们来一步步走代码: 程序运行开始,系统会给我们加一些启动代码以及调用一些API函数,当然在此不做介绍。然后,程序运行到 main函数。调用 main函数的汇编指令为 call A (假设A是main函数的地址)。在执行call指令的时候,会 先把main函数的返回地址压到栈里 ,执行 PUSH EBP 将栈底的地址压入栈里保存待用,再执行 MOV EBP ,ESP 令栈底指针指向栈顶。然后代码执行到a=1,b=2

C语言编译过程总结简版

假如想象 提交于 2020-03-09 20:02:53
C语言编译过程总结详解 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。 编译过程 编译过程又可以分成两个阶段:编译和会汇编。 编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段: 第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。 主要是以下几方面的处理: (1)宏定义指令,如 #define a b 对于这种伪指令

C语言打印时格式总结

元气小坏坏 提交于 2020-03-09 16:50:16
C语言中%X的意思是以十六进制数形式输出整数,类似%x的输出格式还有: 1.%c:单个字符 2.%d:十进制整数 3.%f :十进制浮点数 4.%o:八进制数 %s :字符串 6.%u:无符号十进制数 7.%%:输出百分号% 引用:https://zhidao.baidu.com/question/344067897.html 来源: CSDN 作者: qq_29566629 链接: https://blog.csdn.net/qq_29566629/article/details/104753100