C语言中的宏定义如何使用?
C语言中的宏定义如何使用?学一维数组时老师说#defineNainta[N]是正确的,但是我上机试的时候有点问题,不知道是数组出了问题还是咋了,希望哪位大佬帮忙看下。谢谢...
C语言中的宏定义如何使用?学一维数组时老师说 #define N a int a[N]是正确的,但是我上机试的时候有点问题,不知道是数组出了问题还是咋了,希望哪位大佬帮忙看下。谢谢。
展开
5个回答
2018-07-06 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
宏定义又称为宏代换、宏替换,简称"宏"。
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为"宏名"。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是"换"。一切以换为前提、做任何事情之前先要换,准确理解之前就要"换"。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define Pi 3.1415926
把程序中出现的Pi全部换成3.1415926
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为"宏名"。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是"换"。一切以换为前提、做任何事情之前先要换,准确理解之前就要"换"。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define Pi 3.1415926
把程序中出现的Pi全部换成3.1415926
展开全部
您好!很高兴为您解答。
宏定义的用处主要体现在便于程序的调试上。
比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):
#define PI 3.14
那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:
#define PI 3.1415926
那么程序中的所有PI都会变成3.1415926
可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926
即使是定义double PI=3.14;,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14;”是多么困难的事。
又比如数组,定义时是不能出现“int a[n];”这样的定义的,编译通不过,因为必须规定数组长度。
但如果是:
#define N 10
int a[N];
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。
如此看来,宏定义提升了程序编写的灵活性。
望采纳~如您还有不解,欢迎追问~
宏定义的用处主要体现在便于程序的调试上。
比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):
#define PI 3.14
那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:
#define PI 3.1415926
那么程序中的所有PI都会变成3.1415926
可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926
即使是定义double PI=3.14;,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14;”是多么困难的事。
又比如数组,定义时是不能出现“int a[n];”这样的定义的,编译通不过,因为必须规定数组长度。
但如果是:
#define N 10
int a[N];
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。
如此看来,宏定义提升了程序编写的灵活性。
望采纳~如您还有不解,欢迎追问~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正确的完整输出 3 个整数的程序结构应该按照如下写法:
#define N 3
#include <stdio.h>
int main( )
{
int i, a[N] = { 1, 2, 3 } ;
for(i = 0 ; i < N ; i ++ ) /* 循环输出整数数组 a 中的 3 个数字,特别要注意:i 必须要写成:i < N,而不能够写成:i <= N,否则的话,就会产生越界错误。 */
printf("%d\t", a[i] ) ;
printf("\n" );
return 0 ;
}
由于 C 语言的数组下标是从 0 开始的,而不是像 PASCAL 语言那样是从 1 开始的。故
你原来的程序语句中:
#define N 3
printf("%d", a[N]) ; 用 N = 3 替换 a[N],就变成了:printf("%d", a[3]) ; 那就肯定越界了。
#define N 3
#include <stdio.h>
int main( )
{
int i, a[N] = { 1, 2, 3 } ;
for(i = 0 ; i < N ; i ++ ) /* 循环输出整数数组 a 中的 3 个数字,特别要注意:i 必须要写成:i < N,而不能够写成:i <= N,否则的话,就会产生越界错误。 */
printf("%d\t", a[i] ) ;
printf("\n" );
return 0 ;
}
由于 C 语言的数组下标是从 0 开始的,而不是像 PASCAL 语言那样是从 1 开始的。故
你原来的程序语句中:
#define N 3
printf("%d", a[N]) ; 用 N = 3 替换 a[N],就变成了:printf("%d", a[3]) ; 那就肯定越界了。
更多追问追答
追问
那那个a[3]不就是代表a[0] a[1] a[2]刚好三个数吗?为啥会越界?
追答
你说的 a[3] 整数数组,确实是代表 a[0]、a[1]、a[2] 刚好三个数字,但是你在 printf(“%d”, a[N]) ; 语句中,因为你定义的是 N 的值为 3,所以将 N 的值代入上面的输出语句,
就变成了:printf(“%d”,a[3]);
还是我前面说的那个问题:在 C 语言中数组的有效下标是从 0 开始的,而不是从 1 开始的,所以在输出 a[3] 时,程序自然就会越界出错了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组下标从0开始,a[N]要改成a[N-1],否则下标越界了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf这一行末尾的;改一下, 不要使用中文输入法.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询