c语言问题:xxx_proc_srch(a,b,c)是函数声明吗? c语言交换a和b的值
C语言函数声明的问题
我也来 说几句。。
标准编译器 对函数的调用 都要
先申明 才能 调用
(生产的时候就这样设定的)。。我推荐试用
大点的 vs2005,vc2000.
小点的 Dev-cpp ,Turboc 3.0 (2.0 不支持鼠标有点 麻烦)
这里 就涉及: 申明和定义之间的区别。
申明-- 不开辟内存,仅仅告诉编译器,申明的部分存在,要预留一点空间。
定义-- 开辟内存。
申明 属于 预编译范畴的。最好写在头文件中(楼主,自定义头文件学了没有啊?)(申明都写在头文件中,只是一种好的编程习惯)
因为 在编译的时候,编译器先处理一些特殊数据(宏定义,函数的申明,变量的申明),在这个过程中,编译器 通过申明 可以预测整个定义需要的内存大小,并且 把这些大小预留起来,留给定义的时候使用(因为虽然定义,但是在 main函数里面没有调用,一样的不分配内存)。
如果不事先申明,直接定义,有可能会造成系统崩溃,出现内存不足,不能分配。 然而现在内存都是1G左右了,所以一般空间都足够,所以你也可以不申明直接定义函数。
但是一旦内存紧张,就会出错,而且程序简洁性就很低。(不看到定义,还不知道原来还定义了这么一个函数!!!)
还有 变量也一样,标准的都是 先申明在定义。
extern int i; //申明
int i=0; //定义并初始化为0
int i; //定义
.。。。。。。。。。。。。。。。。。
所以 从现在其要养成良好的编程习惯
先申明,在定义。
申明最好都放在 一块,并且都在头文件中(为了便于管理)。
C语言中不能在函数里面声明函数吗
你这个问题看似简单,其实涉及到了函数的声明与定义,以及C语言的标准规范和具体编译器的实现问题。
从标准规范来看:
1. C语言允许函数里声明函数,但是不建议这么写,因为不利于多文档的组织。
2. C语言禁止函数里定义函数,但是个别编译器却没遵循标准。
3. C语言的标准和编译器的实现并不是完全统一,为了可移植性,建议一切都按C语言标准中推荐的做法来写。
我还写了个代码附带注释,程序在CFree这个IDE(内置gcc编译器)上运行是通过的,但是在VC++6上就可能通不过了,主要是编译器具体实现不同。
#include <stdio.h>
//函数外
//声明,允许,推荐的做法
int add1(int a, int b);
int main(int argc, char *argv[])
{
//函数内
//声明,允许,但是不建议这么写
int add2(int a, int b);
//C语言标准里禁止函数内定义函数、
//但是有个别编译器也允许这样做,比如GCC
//此种写法不通用,强烈不建议使用
int add3(int a, int b)
{
return a+b;
}
//C99标准中,调用函数之前,必须保证声明已出现过
printf("%d\n", add1(1,2));
printf("%d\n", add2(2,3));
printf("%d\n", add3(3,4));
return 0;
}
//函数外
//定义,允许
int add1(int a, int b)
{
return a+b;
}
//定义,允许
int add2(int a, int b)
{
return a+b;
}
-->您的采纳是我们的动力<--
c语言编程问题,编写代码,a+b问题,求大神帮忙哇( ๑ŏ ﹏ ŏ๑ )
【解题思路】这道题的难点是超多位数,也就是说40位数用最长的基础类型都表示不下。这个时候可以用数组,最简单的就是你定义三个长度为40的字符数组,每个元素存放一个0-9的数值,然后逐位进行加运算,碰到超过10的就进位。
【程序代码】
#include
#include
#include
using namespace std;
int main()
{char a[40]={0},b[40]={0},c[41],d,i,j,k;
printf("请输入第一个位:"); //显示输入提示
for(i=0;i<40;i++) //通过循环读入a数组
{do{d=getch(); //从键盘获取一个字符
if(d==13||d==' ') break; //如果读到的是回车或空格退出循环
}while(d<'0'||d>'9'); //如果输入的为非数字,忽略重输
printf("%c",d); //显示字符(因为getch函数不回显)
if(d==13||d==' ') break; //如果是回车或空格结束读取
c[i]=d-'0';} //否则的话让c[i]等于输入的数值
i--;
for(k=i;k>=0;k--) a[i-k]=c[k]; //倒序排列
/*关于输入有很多种方法,可以用cin, scanf(),也可以用getchar(),各有优劣,这里之所以用getch(),是因为getch不回显,这样可以及时作出判断,不是数字就直接忽略。
另外为什么要倒序,是为了保证a[0]和b[0]都是个位数,这样后面加法运算时,不用去费劲的对齐*/
printf("\n请输入第二个位:"); //显示输入提示
for(j=0;j<40;j++) //通过循环读入b数组
{do{d=getch(); //从键盘获取一个字符
if(d==13||d==' ') break; //如果读到回车或空格退出循环
}while(d<'0'||d>'9'); //如果输入的为非数字,忽略重输
printf("%c",d); //显示字符(因为getch函数不回显)
if(d==13||d==' ') break; //如果是回车或空格结束读取
c[j]=d-'0';} //否则的话让c[j]等于输入的数值
j--;
for(k=j;k>=0;k--) b[j-k]=c[k]; //倒序排列
for(k=0;k<41;k++) c[k]=0; //初始化c数组
if (i printf("\n两个数的和等于:"); //显示结果 for(k=0;k<=d;k++) //通过循环计算 {c[k]=(c[k]+a[k]+b[k]); //算出和 c[k+1]=c[k]/10; //如果超过10则进位 c[k]=c[k]%10;} //取个位数,避免超过10 if(c[d+1]!=0) d++; //如果最高位有进位,则最高位再加一位 for(k=d;k>=0;k--) //用循环显示出c数组的每一位 printf("%d",c[k]); //显示出c数组的每一位 printf("\n",d); //换行 system("PAUSE"); //暂停屏幕,以看清结果 return 0;} //结束程序【运行结果】 int add(int x, int y); //这就是函数声明 int main(void) { ........ } int add(int x, int y) //函数定义 { ........ }数据结构c语言那些函数的声明怎么写