展开

关键词

C |

C C可以是变量、变量指针和变量引用。 C在用组元素作时,把实的值传给形,是“值传递”方式。 据传递的方向是从实传到形,单向传递。 C组名作 除了可以用组元素作为外,还可以用组名作。 用组元素作实时,向形变量传递的是组元素的值,而用组名作时,向形传递的是组首元素的地址。 C组名作,应该在主调和被调分别定义组。 实组与形组类型应一致,如不一致,结构出错。 100道C源码案例请去公众号:C门到精通

17040

C笔记】变

提到变,我们的感觉是不是既熟悉又陌生?感觉熟悉是因为我们平时都在使用着,如我们常使用的printf()与scanf()就是典型的变。 如: printf("hi"); //给printf1个 printf("%d\n",a); //给printf2个 printf("%s %d", str, a); //给printf3个 ... ... //给printfn个 我们可以根据需要给printf()n个,这就是变。 感觉陌生是因为我们没有试着创建变。 这里第二个是double类型,传的不定就应是double类型 */ sum += va_arg(ap, double); } /*【第五步】:使用va_end完成清理工作

35440
  • 广告
    关闭

    腾讯云618采购季来袭!

    一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C | C++可重

    1 前 最近在公司维护的项目中碰到一个解决了定位很久的 bug , bug 找到的时候发现犯了很低级的错误——在中断处理中调用了 printf ,因为中断处理的调用了不可重,导致中断丢失和系统位置错误 那什么是不可重呢? 为什么中断处理不能直接调用不可重? 怎样写可重? 就以上三个问题展开小短文: 2 什么是不可重? 可重主要用于多任务环境中,一个可重简单来说就是可以被中断的,也就是说,可以在这个执行的任何时刻中断它,转 OS 调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重由于使用了一些系统资源 =*lpcY;     lpcY=cTemp;   ///< 访问了全局变量 } C. 总而之,中断处理做的事情越简单越好。 4 如何写出可重? 在体内不访问那些全局变量; 如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

    29988

    C(可重

    大家都写过C中的,但有没有想过,你编写的在同一个时刻是否允许被多个调用者调用呢?是不是不管谁来调用,有多少个调用者同时调用,都能给出一致的表现,返回一致的结果? 综上所述的行为总结一个概念就是:在多次调用中(不管是否同时)行为变现一致的,被称为可重,否则被称为不可重。 POSIX.1-20001标准规定,所有的标准库都必须是可重,除了以下这些: ? 正如其名所提示的,我们在程序中,同时调用这些有可能会产生不一致的结果,产生这样结果的原因有三,上面已经提到,用比较官方严肃的来表述如下: 一是因为内部使用了共享资源,比如全局变量、环境变量。 二是因为内部调用了其他不可重。 三是因为执行结果与某硬件设备相关。

    1.6K40

    7.3 C组作为

    01组元素作 1、组元素可以用作,不能用作形。 2、在用组元素作时,把实的值传给形,是“值传递”方式。 3、据传递的方向是从实传到形,单向传递。 02 组名作 1、除了可以用组元素作为外,还可以用组名作。 2、用组元素作实时,向形变量传递的是组元素的值,而用组名作时,向形传递的是组首元素的地址。 3、用组名作,应该在主调和被调分别定义组。 4、实组与形组类型应一致,如不一致,结构出错。 5、形组可以不指定大小,在定义组时在组名后面跟一个指针变量,用来接收一个地址。 C | 统计捐款人及人均捐款 更多案例可以go公众号:C门到精通

    2642927

    C顺序问题

    首先,看一道某年全国二级C考试的选择题。 选 14的人占多,还有不少认为有误无法运行的。 首先,这段代码是可以执行的。 这道题谈不上难,但不知道的就会错。 这道题答案是16。 ? 对于,在计算的时候是按照从右往左的顺序进行的。 对于func,先求右边x+=2,返回x=8,然后计算结果。也就是传递给形的两个值都是8,返回值为16。 下面我们写程序验证下,并结合自增自减运算升级下难度。 ,计算也要按照从左往右。 但下一步是先让a的值-1,再计算左边的,还是别的呢? 根据运行结果,我们知道是先计算左边,a的值+1输出104,然后用完了以后a的值-1。 最后一行输出103也验证了是最后执行a的值-1。

    34810

    C-的可变形(不定形)

    在学习C章节时发现,给的形必须和定义原型的类型、量一致才可以正常调用。 平时使用的printf,scanf等时,传量却可以随意改变,例如: printf("大家好"); printf("我是整:%d\n",123); printf("%d%d%d%d\n", .); 发现这些定义时,列表里有一个省略符号...,这个省略符号就表示当前支持不定长形。 可变形本身实现原理 明白了如何定义可变形,接下来就得学习可变形的原理,然后学习如何去提取这些传。 (1). 的形是放在栈空间的。 (2). 可变形,传的多余的都是存放在栈空间。 存放内存地址是连续的。 理论上只要知道传的首地址,就可以推出其他的地址。

    11410

    C笔记】指针作为

    指针有两种常用的用法,一种是作为结构体成员,关于指针作为结构体成员的用法可移步至上一篇【C笔记】指针作为结构体成员进行查看。另一种是指针作为。 这一篇分享的是指针作为。 一、指针作为 指针可以作为一个传递给另一个。这时指针的使用就像普通的常量和变量一样。 先假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序等等),为了能让库更加通用,不想在中嵌排序逻辑,而让使用者来实现相应的逻辑;或者,能让库可用于多种据类型( 例如,在C的通用工具库stdlib.h中,有如下一个原型: void qsort(void *, size_t, size_t, int (comp*)(const void *, const 关于typedef与define的区别可查看往期笔记:【C笔记】#define与typedef的区别?

    3.9K11

    C不定实现方式

    如何实现不定: 由于在C中没有重载,解决不定问题变得比较麻烦,即使采用C++,如果不能确定,也很难采用重载。对这种情况 ,提出了指针来解决问题。 是位于第一个可选之前的固定, 或者说最后一个固定.如有一va 的声明是void va_test(char a, char b, char c, ...), 则它的固定依次是a,b,c , 最后一个固定argN为c, 因此就是va_start (arg_ptr, c). (3)va_arg(arg_ptr, type) 返回列表中指针arg_ptr所指的, 返回类型为type Process returned 24 (0x18) execution time : 0.542 s 4 Press any key to continue. 5 */ 我们从上面可以看见这样在中加三个是没有问题的 从上面三个例子可以看出我们传都是一个类型的; 例4:  不同类型的: 1 int print(const char *format, ...) 2 { 3 va_list

    93440

    C是如何传递的?

    我们可能听过C中的传值和传指针,在其他中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。 传值 我们在初学C的时候就被老师教过,下面的方式是无法交换a和b的值的: #include void swap(int a,int b) { int temp = a; a = b; b = temp 为什么又有传值,又有传指针 看到这里,不知道你是否会疑惑,为什么给传递的时候,一会是传值,一会是传指针呢?为什么传指针就能改变的值呢?实际上,C里,传递都是值传递! c1232_副本_副本.jpg 可配合下面的图进行理解: 总结 本文总结如下: 的形都是原据的“副本”,因此在内无法改变原都是传值,传指针本质上也是传值 如果想要改变内容 ,则需要传该的地址(指针和引用都是类似的作用),通过解引用修改其指向的内容 以上结论不限于C 本文原地址:https://www.yanbinghu.com/2019/06/20/53981.html

    86111

    C:指针的指针

    这是道哥的第013篇原创 前 今天同事问了一个问题:在中传递指针的指针,很常用的一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。 执行do_work(pData, 128); 这里传递的是pData本身,所以进void do_work(char *p, int size)之后,实pData的内容就赋值给形p,所以指针 到这里就已经看到程序崩溃的原因了:虽然给指针p赋值了,但是实pData中的内容一直为空,因此从do_malloc返回之后,pData仍然是一个空指针,所以就崩溃了。 执行do_malloc(&pData, 128); 把pData指针的地址作为实进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针的指针(二级指针),因此do_malloc的第一个就要定义成 我会把十多年嵌式开发中的项目实战经验进行总结、分享,相信不会让你失望的!

    23220

    C-的定义、声明、传

    C是非常重要的知识点,一个完整的C程序就是由主和各个子组成的,主调用子完成各个逻辑功能。 2. C里是什么概念? 相当于打包代码的过程,程序代码里如果有很多重复代码,可以将重复代码写成一个,进行调用。 C程序里除了main(主)之外的都叫子,都属于自定义。 3. 如何定义? 如何编写一个定于分为几种情况:1. 有形 2.无形 3.有返回值 4. 如何传并接收返回值? b) { int c; c=a+b; return c; //返回结果,并终止执行 } 6. return 句作用 return 本身功能终止执行,顺带返回一个值给调用者。

    8410

    C可重和不可重

    可重和不可重的概念   在中如果我们使用静态变量了,导致产生中断调用别的的 过程中可能还会调用这个,于是原来的 静态变量被在这里改变了,然后返回主体,用着的那个静态变量就被改变了 这类我们称为不可重。    那么什么是可重呢?所谓可重是指一个可以被多个任务调用的过程,任务在 调用时不必担心据是否会 出错。不可重在实时系统设计中被视为不安全。 相信很多人都看过下面这个面试题 中断是嵌式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。 2) ISR 不能传递。如果你没有看到这一点,你被雇用的机会等同第一项。 3) 在许多的处理器/编译器中,浮点一般都是不可重的。

    1.3K30

    C第七讲,门.

    C第七讲,门. 一丶了解面向过程和面向对象的区别. 为什么要先讲面向过程和面向对象的区别? 面向过程,就是什么都要自己做.  比如你要吃饭. 那么你得自己做饭. 而C就是面向过程的. 也就是说. 面向过程就是自己做. 自己写. 二丶什么是. 不是学上的. 这里的指的是解决一定问题的基本代码. 基本的功能单位. 比如你想写一个加法. 这个小袋子就是. 三丶自定义 法: 返回值 名字 (行形) 1.无无返回值的定义 首先定义一个无无返回值的. 则会输出2. 2.有有返回值的定义 int Sub(int a, int b) //返回值int ,所以用int类型变量接受.是int,且是2个.所以传两个int { return int Ret = Sub(4,3);//main 调用Sub printf("%d\r\n",Ret); system("pause"); return 0; } 3.的形的实

    37880

    C输出(ScanfPrintf)

    学习C的同学,都知道scanf,printf, scanf ---> scan format printf ---> print format是成对,基于scanf,printfC中还提供了许多相似的 说明 Scanf printf 执行格式化输 int scanf(char *format ); 产生格式化输出的 int printf(char *format...); cscanf cprintf 从控制台执行格式化输 int cscanf(char *format); 送格式化输出至屏幕 int cprintf(const char *format); fscanf fprintf 从一个流中执行格式化输 char *string, char *format); 送格式化输出到字符串中 int sprintf(char *string, char *farmat ); vfscanf 从流中执行格式化输 ); vfprintf 送格式化输出到一流中 int vfprintf(FILE *stream, char *format, va_list param); vscanf 从stdin中执行格式化输

    41400

    c门教程–-10

    c门教程–-10 是一组一起执行一个任务的句。每个 C 程序都至少有一个,即主 main() ,所有简单的程序都可以定义其他额外的就是把部分功能组装在一起,方便重复使用。 /* 返回两个中较大的那个 */ int max(int num1, int num2) { /* 局部变量声明 */ int result; if (num1 > num2) 我们把求最大值作为一个编写,那么可以方便我们重复使用。 ? 1:第一个int就是返回类型,如果没有返回就写void 2:max是的名称 3:num1 和 num2是,如何没有可以不写。 我们留一下思考作业:求一下3个的最小值。

    10320

    C

    其最小单位是,每个负责一个功能,整个软件系统由一个个组成,其中作为程序口的被称为主。 主依次调用其他普通,普通之间依次调用,从而完成整个软件系统的功能。    定义的一般形式:(无/有/空) 无形式: 类型标识符  名() { 声明部分; 句部分; } 有形式: 类型标识符  名(形式列表) { 声明部分; 句部分 的嵌套调用 C不可嵌套定义之间是平等的,但可以嵌套调用。 2)实与形类型一致。  3)在被调用中声明了形组大小为10,但在实际上,指定其大小是不起任何作用的,因为C编译对形组大小不做检查,只是将实组的首元素的地址传给形组。 register寄存器变量 c序将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出加运算,不必再到内存中去存取,这样提高效率。用关键字 register声明。

    73340

    C_【转】

    drive 指定的驱动器(0=当前,1=A,2=B,3=C等) direc 保存指定驱动器当前工作路径的变量      成功返回0 char *getcwd(char *buf,iint n) 此取当前工作目录并存 有后缀  p时,可以利用DOS的PATH变量查找子程序文件 l时,中被传递的固定 v时,中被传递的不固定 e时,传递指定envp,允许改变子进程的环境, 无后缀e时 有后缀 p时, 利用DOS的PATH查找子程序文件 l时, 传递的固定. v时, 传递的不固定. e时, 指定envp可以传递给子程序,允许改变子程序运行环境. 所在库为assert.h、math.h void   assert(int test) 一个扩展成if句那样的宏,如果test测试失败, 就显示一个信息并异常终止程序,无返回值 void   perror )从控制台读一个字符串,分别对各个进行 赋值,使用BIOS进行输出 int   vscanf(char *format,Valist param)从控制台读一个字符串,分别对各个进行 赋值,

    1.2K30

    7.1 C

    的名字应该反映其代表的功能。 3、一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。 5、C程序的执行是从main开始的,如果在main中调用其他,在调用后流程返回到main,在main中结束整个程序的运行。 2、用户自己定义的。它是用以解决用户专门需要的。 从的形式看,分为: 1、无。在调用无是,主调不向北调用传递据。  2、有。 2、无定义的一般形式: 类型名    名() {     体 } 或 类型名    名(void) {     体 } 3、有定义的一般形式: 类型名    名(形式表列 ) {     体 } 4、定义空 类型名    名() {} C | 判断是否是闰年 更多案例可以go公众号:C门到精通

    2113027

    Creturn

    Ritchie 的经典巨著 The C programming Language 2e(《C 程序设计第二版》)用的就是 main( )。 如果 main 的最后没有写 return 句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加return 0; ,表示程序正常退出。 同样,main 的返回值类型也必须是int。如果main的末尾没写return句,C++98 规定编译器要自动在生成的目标文件中加 return 0; 。 关于 void main 在 CC++ 中,不接收任何也不返回任何信息的原型为“void foo(void);”。 所以一般不鼓励把返回类型定义为void,至少返回应该是int,而在的最后加上return 0.句:   int func(列表)   {        ……        ……

    20910

    扫码关注云+社区

    领取腾讯云代金券