int d=e;
鐵力網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),鐵力網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為鐵力上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的鐵力做網(wǎng)站的公司定做!
這個(gè)就不對(duì),改成d=e
還有,int e(int, int )
{
return a+b;
}
這個(gè)函數(shù)改成int e(int a, int b)
{
return a+b;
}
可以的。
例如庫函數(shù)就是把函數(shù)放到庫里,把一些常用到的函數(shù)編譯完放到一個(gè)文件里,供不同的人進(jìn)行調(diào)用。C語言的庫函數(shù)并不是C語言本身的一部分,它是由編譯程序根據(jù)一般用戶的需要編制并提供用戶使用的一組程序。
windows中靜態(tài)編譯將導(dǎo)出聲明和實(shí)現(xiàn)都放在lib中。動(dòng)態(tài)LIB文件相當(dāng)于一個(gè)C語言中的h文件,是函數(shù)導(dǎo)出部分的聲明,而不將實(shí)現(xiàn)過程嵌入到程序本身中,編譯后只是將函數(shù)地址存在宿主程序中,運(yùn)行到調(diào)用函數(shù)是調(diào)用DLL并載入函數(shù)來實(shí)現(xiàn)函數(shù)的具體操作。
因此,c語言中的函數(shù)是可以單獨(dú)進(jìn)行編譯并導(dǎo)出的。
擴(kuò)展資料:
單獨(dú)編譯的相關(guān)方式及文件:
1、lib文件是必須在編譯期就連接到應(yīng)用程序中的,而dll文件是運(yùn)行期才會(huì)被調(diào)用的。如果有dll文件,那么對(duì)應(yīng)的lib文件一般是一些索引信息,具體的實(shí)現(xiàn)在dll文件中。如果只有l(wèi)ib文件,那么這個(gè)lib文件是靜態(tài)編譯出來的,索引和實(shí)現(xiàn)都在其中。
2、靜態(tài)編譯的lib文件有好處:給用戶安裝時(shí)就不需要再掛動(dòng)態(tài)庫了。但也有缺點(diǎn),就是導(dǎo)致應(yīng)用程序比較大,而且失去了動(dòng)態(tài)庫的靈活性,在版本升級(jí)時(shí),同時(shí)要發(fā)布新的應(yīng)用程序才行。
參考資料來源:百度百科-庫函數(shù)
參考資料來源:百度百科-lib文件
#include"stdio.h"
void?jz(int?*pointer);
int?main()
{
int?i,j,*p,a[3][3];
for(i=0;?i3;?i++)
{
for(j=0;?j3;?j++)
scanf("%d",a[i][j]);
}
p=a[0][0];
jz(p);
for(i=0;?i3;?i++)
{
for(j=0;?j3;?j++)
printf("%d?",a[i][j]);
printf("\n");
}
return?0;
}
void?jz?(int?*pointer)
{
int?i,j,k;
for(i=0;?i3;?i++)
{
for(j=i;?j3;?j++)
{
k=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=k;
}
}
}
以上代碼已更改可以編譯通過,運(yùn)行結(jié)果:
c語言中叫做回調(diào)函數(shù),將函數(shù)指針(如max)作為函數(shù)的參數(shù),函數(shù)(如fun)中調(diào)用這個(gè)參數(shù)指向的函數(shù),
調(diào)用函數(shù)(fun)時(shí)看情況而給函數(shù)傳入不同的函數(shù)指針
例如fun(a,b,min),那么fun函數(shù)調(diào)用執(zhí)行三個(gè)參數(shù)就調(diào)用min函數(shù)
參數(shù)的定義要與傳入的函數(shù)指針相匹配
例如fun(int,x,int y,(*p)(int,int)) 那么調(diào)用fun(a,b,min)時(shí),min的參數(shù)必須是(int ,int)
#include?stdio.h
#include?stdlib.h
#include?string.h
void?virtualFun(int?choice,?int?n,?char?*str[],?char?*(*p)(int?,?char?**));
char?*maxs(int?n,?char?*s[]);??//此函數(shù)通過指向函數(shù)的指針調(diào)用
char?*mins(int?n,?char?*s[]);??//此函數(shù)通過指向函數(shù)的指針調(diào)用
char?*minc(int?n,char?*s[]);???//此函數(shù)通過指向函數(shù)的指針調(diào)用
void?Menu();
char?*(*func)(int?n,?char?**);
int?main()?{
char?*name[]={"FOLLOW?ME","BASIC","GREAT?WALL?","FORTRAN","COMPUTER?DESIGN"};
int?n=5;
char?ch=0;
while?(ch!=4)?{
Menu();
ch?=?getchar();
getchar();//ignore?'\n'
ch?=?ch?-?'0';
virtualFun(ch,?n,?name,?func);
}
return?0;
}
void?virtualFun(int?choice,?int?n,?char?*str[],?char?*(*p)(int?n,?char?**name))?{
switch(choice)?{
case?1:?//max?string
p?=?maxs;
break;
case?2:
p?=?mins;
break;
case?3:
p?=?minc;
printf("[result?is?:%c]\n",?*p(n,?str));?//because?the?return?is?a?char
default:
return;
}
printf("[result?is?:%s]\n",?p(n,?str));
}
char?*maxs(int?n,?char?*s[])?{
int?i;
char?*max?=?s[0];
for?(i=1;in;i++)?{
if?(strcmp(max,?s[i])0)
max?=?s[i];
}
return?max;
}
char?*mins(int?n,?char?*s[])?{
int?i;
char?*min?=?s[0];
for?(i=1;in;i++)?{
if?(strcmp(min,?s[i])0)
min?=?s[i];
}
return?min;
}
char?*minc(int?n,?char?*s[])?{
int?i;
char?ch?=?s[0][0],?*p,?*r=s[0];
for?(i=0;in;i++)?{
p?=?s[i];
while(*p++)?{
if?(*p0x20??ch*p)?{
ch?=?*p;
r?=?p;
}
}
}
return?r;
}
void?Menu()?{
char?menu[]?=?"1??max?string\n\
2??min?string\n\
3??min?char?\n\
4??exit\n";
printf("%s",?menu);
}
fun中的指針datas連指向都沒有,卻用datas-a = a;和datas-b = b;給這指針的目標(biāo)成員a、b賦值!datas這時(shí)還是野指針,它哪兒有a和b?肯定會(huì)運(yùn)行終止的……你這個(gè)代碼很好改:把函數(shù)名前的*刪除,讓函數(shù)返回結(jié)構(gòu)體變量;再把datas前的*刪除,讓它成為一個(gè)Data型變量;主函數(shù)中把myData前的*刪除,讓它也成為一個(gè)結(jié)構(gòu)體變量,把主函數(shù)中的printf中的兩個(gè)-改成兩個(gè).就可以了。希望對(duì)你有幫助。