首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言参数定义与无参数定义

前两天上课,被JAVA老师问懵了,老师问:“你们学C语言,有没有写过带参的玩一玩”,说实话,我根本没听过什么带参的,我只用过定义,所以我下来一定要找个时间把这“带参的搞懂”,于是就有了这篇文章...C语言定义分两种,无参的和有参的 1.无参数        无参数定义的一般形式为: #define name value//name是你起的名字,就跟起函数名一样,value是你要给这个名字赋予什么值...2.有参数        有参数的定义形式一般为: #define name(参数1,参数2,....) sentence//sentencen表示语句 //示例: #define max(a,b...=t; int swap2(int c,int d) {         int t;         t = c;         c = d;         d = t; } int main()...加这层的用意是把所有参数在中间曾全部展开。

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

    c语言之带参数定义

    1.带参数定义中,名和新参表之间不能有空格, 2.在带参数定义中,形参参数不分配内存单元,因此不必作类型定义。而调用中的实参有具体值,要用它去代换形参,因此必须作类型说明。...,而调用中实参可以是表达式。...4.在定义中,字符串内的形参通常要用括号括起来以避免出错。 5.带参的和代餐函数类似,但本质不同,除此之外,把同一表达式用函数处理和用处理两者的结果有可能不同。...这是因为普通函数调用时,实参传给形参的是值,而在定义时,要用表达式进行替换,即(i++)*(i++),所以I++会被执行两次。...6.定义也可以用来定义多个语句,在调用时,把这些语句又代换到源程序内。

    2.4K20

    C语言定义

    不带参数的定义方式如下(这也是我们经常用到的定义) #define 名 字符串 //没有分号,说没有分号倒不如说最好不要加分号         这里说下原因吧:因为定义它并不是C语言的语句,所以不用加分号...名实际上就是一个标识符,必须要符合C语言当中标识符的语法规定的。         标识符的规则:字母、数字、下划线,不以数字开头,注意:关键字不能作为标识符!...,把里面的值传递给名当中的参数表,然后再传过去的参数表替换到字符串的文本当中去。...它的工作原理是这个样子的,这里3+1就是参数,那么就会把3+1传递到参数当中去。那么这个时候替换完成之后就是:3+1 * 3+1,这不就是7。...命名事项         相信有些小伙伴已经发现了这个函数的的使用语法和函数是非常类似滴。所以语言本身就会没办法帮我们区分二者的一些使用。

    32510

    excel编程 c语言,(巨集)

    对于编译语言展开在编译时发生,进行展开的工具常被称为展开器。这一术语也常常被用于许多类似的环境中,它们是源自展开的概念,这包括键盘语言。...计算机语言C语言或汇编语言有简单的系统,由编译器或汇编器的预处理器实现。C语言预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C 程序员可以获得更精巧的。...Lisp类语言如Common Lisp和Scheme有更精巧的系统: 的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。...一个 C 可以定义一段语法的替换,然而一个 Lisp 的却可以控制一节代码的计算。 获得了控制代码的执行顺序(见惰性计算和非限制函数)的能力,使得新创建的语法结构与语言内建的语法结构不可区分。...== 语言 == 语言是一类编程语言,其全部或多数计算是由扩展完成的。语言并未在通用编程中广泛使用,但在文本处理程序中应用普遍。

    1.6K20

    C语言参数定义:#define f(X) ((X)*(X))

    l 定义不是C语句,不必在行末加分号。l 对程序中用“”括起来的字符串内的字符,即使与名相同,也不进行置换。...l 定义可以嵌套使用,例如:#define R 3.0#define PI 3.14159#define L 2*PI*R 3.知识点:带参数定义l 一般形式:#define 名(参数表)...字符串l 带参数不占运行时间,只占编译时间;只是简单、机械字符替换;名无类型。...l 要注意有括号和没括号的区别 不带参数定义比较简单,我们今天讲的是带参数的。最后红色字体提到有括号、没括号的区别。那提一个问题:怎么用定义表示数学上的函数 f(x)=x*x ?...,使用带参数时,要注意参数要带上括号,最好整个也要带上括号: #define f(X) ((X)*(X)) 否则,容易误导别人的同时,自己也容易出错。

    5.1K00

    C语言 | offsetof和container_of

    今天分享C语言中的两个,这两个包含了指针和结构体的知识,非常具有代表性。另外,这个题目曾经是大疆无人机的一道笔试题,可见,这两个C语言基础还是有一定要求的。...废话不多说,今天要说的两个分别是offsetof和container_of,第一个是用来计算结构体中某个成员相对于结构体的偏移量,第二个是已知指向结构体某个成员的指针,来计算结构体的指针。...我们知道,C语言给我们提供了一个很好的方式去访问结构体成员,比如结构体变量我们可以用点.去访问,结构体指针我们可以用->去访问,这两种访问方式本质上是通过指针进行访问的,只不过这个过程是编译器帮我们处理了...,还要知道变量类型,所以C语言帮我们考虑了这一点,使用简单的点的方式就行了。...既然C语言帮我们做了计算偏移量这件事情,那我们是不是可以反过来利用一下它,先通过点的方式访问变量,再对变量进行取地址运算,减去结构体首地址不就是变量的偏移量了吗?

    2.2K30

    C语言定义(#define定义常量​、#define定义​、 带有副作用的参数替换的规则、 函数的对比)

    一、#define的基本语法 在C语言中,常量是使用频率很高的一个量。常量是指在程序运行过程中,其值不能被改变的量。常量常使用#define来定义。...是一种将一系列命令组织在一起,作为一个单独命令来完成特定任务的方式。在编译语言中,展开是在编译时进行的,编译器会自动将替换为一系列指令。展开器是用于执行展开的工具。...除了编译语言中的这个概念也被广泛应用于其他环境中,比如键盘语言。键盘是将一系列小命令或动作转化为一系列指令,以简化日常工作。...Microsoft Word中对定义为:“就是组织到一起作为一独立的命令使用的一系列word命令,它能使日常工作变得更容易”。...Word使用语言Visual Basic将作为一系列指令来编写。 Excel办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“”。

    66710

    C语言定义技巧

    C语言定义技巧(常用定义) 写好C语言,漂亮的定义很重要,使用定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得定义。...((c) - 0x20) : (c) ) 13、判断字符是不是10进值的数字 #define  DECCHK( c ) ((c) >= '0' && (c) <= '9') 14、判断字符是不是16..."##"的用法 一、一般用法 我们使用#把参数变为一个字符串,用##把两个参数贴合在一起....需要注意的是凡定义里有用'#'或'##'的地方参数是不会再展开. 1、非'#'和'##'的情况 #define TOW      (2) #define MUL(a,b) (a*b) printf...加多一层中间转换. 加这层的用意是把所有参数在这层里全部展开, 那么在转换里的那一个(_STR)就能得到正确的参数.

    2.3K10

    C语言定义用法

    在上篇文章里面,我们分析了预处理的一个完整过程,这能够让我们理解一个写好的程序,在生成一个可执行文件,到底发生了什么,对我们在大型工程项目里面有助于对程序的理解;今天我们继续接着上篇文章的基础上,来分享有关c语言里面关于定义的用法...在C语言中,“”分为两种:无参数 和 有参数(这里有参数先不举例子,下面具体分析的话,读者可以详细看到示例来理解这个)。...(2)带参和带参函数的一个重要差别就是:定义不会检查参数的类型,返回值也不会附带类型;而函数有明确的参数类型和返回值类型。...对带参的而言,由于是直接替换,并不会检查参数是否合法,存在安全隐患。...: C99中规定可以像函数一样带有可变参数,实现思想就是定义中参数列表的最后一个参数为省略号(也就是三个英文输入法下的句号)。

    2.7K60

    C语言中的定义

    虽然简单的常用于定义常量名,但是它们还有其他应用。 4) 、可以对C语法做小的修改。实际上,我们可以通过定义的方式给C语言符号添加别名,从而改变C语言的语法。...预处理器不会检查参数的类型,也不会进行类型转换。 3) 、无法用一个指针来指向一个。如在17.7节中将看到的,C语言允许指针指向函数。这一概念在特定的编程条件下非常有用。...##运算符 在C语言中,"##"被称为 连接符(concatenator),它是一种预处理运算符, 用来把两个语言符号(Token)组合成单个语言符号。...这样也保证if后面只有一个语句。例如上面的例子,在调用TEST的时候后面加了一个分号, 虽然这个分号可有可无, 但是出于习惯我们一般都会写上。...((c) – 0×20) : (c)) 13: 判断字符是不是10进值的数字 #define DECCHK(c) ((c)>='0' && (c)<='9') 14: 判断字符是不是16

    6.4K10

    C语言 | 判断是否素数

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例16:C语言实现输入一个大于3的整数n,判断他是否为素数(质数)。...解题思路:本题采用的算法是,让n被i除,如果number被2~(number-1)之中的任何一个整数整除,则表示number肯定不是素数,不必再继续被后面的整数除,因此,可以提前结束循环。...此题的关键是看结束循环时i的值是否小于number,如果number被2~(number-1)之间的一个整数整除,则必然是由break语句导致循环提前结束,即i并未达到number的值时,循环就终止了

    2.7K3028

    C语言判断是否素数

    例16:C语言实现输入一个大于3的整数n,判断他是否为素数(质数)。...解题思路:本题采用的算法是,让n被i除,如果number被2~(number-1)之中的任何一个整数整除,则表示number肯定不是素数,不必再继续被后面的整数除,因此,可以提前结束循环。...int main()//主函数  {   int number,i;//定义变量    printf("请随机输入一个数:");//提示语句    scanf("%d",&number);//键盘输入需要判断的数...此题的关键是看结束循环时i的值是否小于number,如果number被2~(number-1)之间的一个整数整除,则必然是由break语句导致循环提前结束,即i并未达到number的值时,循环就终止了...C语言判断是否素数 更多案例可以go微信公众号:C语言入门到精通,作者:闫小林

    3.2K2828

    C语言 | 判断回文数

    例86:一个五位数,C语言编程判断它是不是回文数。 解题思路:回文数是指个位与万位相同,十位与千位相同,即比如5555是回文数。 ...C语言源代码演示: #include //头文件  int main()//主函数  {   long individual;//个位   long ten; //十   long thousand...;//千   long ten_Thousand;//万    long number;   printf("请输入要判断的数:"); //提示语句    scanf("%ld",&number);   ...\n",number);   }    return 0;//主函数返回值为0  } 编译运行结果: 请输入要判断的数:66866 66866是回文数!...以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C语言学习路线     C语言开发工具 更多案例可以go公众号:C语言入门到精通

    3.8K22

    C语言 | 判断回文数

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例86:一个五位数,C语言编程判断它是不是回文数。 解题思路:回文数是指个位与万位相同,十位与千位相同,即比如5555是回文数。...C语言源代码演示: #include //头文件 int main()//主函数 { long individual;//个位 long ten; //十 long thousand...\n",number); } return 0;//主函数返回值为0 } 编译运行结果: 请输入要判断的数:66866 66866是回文数!

    3.3K32

    【编程基础】C语言常见定义

    我们在使用C语言编写程序的时候,常常会使用到定义以及编译指令,有的可能比较常用,有的可能并不是很常用,是不是所有的C语言定义以及指令你都清楚呢?...取消已定义的 #if 如果给定条件为真,则编译下面代码 #ifdef 如果已经定义,则编译下面代码 #ifndef...#运算符 出现在定义中的#运算符把跟在其后的参数转换成一个字符串。 ##运算符 用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。...FILE__ 包含当前程序文件名的字符串 __LINE__ 表示当前行号的整数 __DATE__ 包含当前日期的字符串 __STDC__ 如果编译器遵循ANSI C标准...,它就是个非零值 __TIME__ 包含当前时间的字符串 另外在GCC下面,还有如下的定义: __FUNCTION__ 表示当前的函数名 __VA_ARGS__ 表示可变参数输入

    2K80

    简述C语言定义的使用

    我们仅需要改变一个定义,就可以改变整个程序中出现的所有该常量的值; 可以帮助避免前后不一致或键盘输入错误; 控制条件编译; 可以对C语法做小的修改; 带参数参数的仍要遵循上述规则,区别只是名后面紧跟的圆括号中放置了参数...#define () 注意参数列表中的参数必须是有效的c标识符,同时以,分隔 算符优先级问题: #define COUNT(M) M*M int x=5; print(COUNT...feral) foo(wolf); else bin(wolf); 判断语言被扩展成: if (!...((c) – 0×20) : (c)) 判断字符是不是10进制的数字 #define DECCHK(c) ((c)>='0' && (c)<='9') 判断字符是不是16进制的数字 #define...+/C语言第3版 https://www.cnblogs.com/southcyy/p/10155049.html

    1.6K20
    领券