c語言數組函數
㈠ c語言函數和數組結合
形參,可以是數組也可以是指針,形參變數名不需要和實參一樣,所以可不使用a做變數名。但數組傳參,傳的地址,即使閉實參和形參名不一樣,操作的地址都是一樣的。
㈡ c語言 子函數中定義數組
是滴,除非定義在函數外面。作用域跟{}有關
㈢ c語言函數怎麼調用數組部分
一、數組可定義為全局變數,函數直接調用。
二、數組可定義為局部變數,再通過參數傳遞到函數中調用(實參傳數組名,表示數組首地址,也可通過指針或數組名+數字來傳遞數組局部地址)。
三、main函數想要調用函數返回的數組,可用static定義靜態變數或malloc定義動態數組(字元串常量也可返回使用,但局部變數,在函數調用結束會被釋放,不能作為返回地址使用)。
下面是演示代碼:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char str1[]="我是全局變數數組";
char *fun0(char str2[]);
char *fun1();
char *fun2();
int main()
{
char *str3=NULL,*str4=NULL,*str5=NULL;
char str2[]="我是main函數的局部數組變數";
str3=fun0(str2);
printf("str3:%s,fun函數調用結束,我的地址依然可以使用 ",str3);
str4=fun1();
printf("str4:%s,fun函數調用結束,我的地址依然可以使用 ",str4);
str5=fun2();
printf("str5:%s,fun函數調用結束,函數結束不會自動釋放 ",str5);
free(str5);
return 0;
}
char *fun0(char s[])
{
static char str3[]="我是fun函數申明的靜態數組變數";
printf("str1:%s,fun函數可以直接調用 ",str1);
printf("str2:%s,fun函數通過參數將我的地址傳進來 ",s);
return str3;
}
char *fun1()
{
char *str4="我是fun1函數的字元串常量";
return str4;
}
char *fun2()
{
int len;
char sTemp[]="這是一個臨時數組,之後用於給mallc申請的地址傳值,傳遞內容為:(我是fun函數通過mallic申請的數組)";
char *str5=NULL;
len=strlen(sTemp+63);
str5=(char *)malloc(sizeof(char)*len+1);
if(!str5)return NULL;
strcpy(str5,sTemp+63);
str5[len-2]=0;
return str5;
}
㈣ c語言數組在函數中的定義
用malloc申請一段內存來將原數組內容復制一遍.
對復制的數組進行排序,並進行你需要的運算
用free釋放內存(就你現在的需求,該內存將不再使用,應釋放)
返回結果
要點是.申請到的內存賦值給函數的內部的變數,並且在釋放前該變數不可用於其它用途.數據的指針操作換用別一指針進行.
由於malloc得到的內存不可能再次被malloc得到(由操作系統維護,無需擔心).而該內存的使用周期內僅該函數可以使用其指針,所以其它單元不可能合法使用該內存.
㈤ c語言函數數組
#include<stdio.h>
#include<math.h>
voidsort(intarray[],intn)
{inti,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])//加括弧,但是這時候就不是選擇排序而是冒泡排序
{
t=array[i];
array[i]=array[j];
array[j]=t;
}
}
}
voidmain()
{
inta[]={1,5,6,8,9,2,3};
sort(a,7);
for(inti=0;i<7;i++)
{
printf("%3d",a[i]);
}
}
㈥ C語言用函數實現數組賦值
void
Chg_Array(int
array[],
int
size,
int
value)
{
int
i;
for(i=0;i<size;i++)
array[i]=value;
}
Chg_Array(M_a,
31,
9)
//將數組
M_a
的31個元素賦值為9.
一維數組不需要二維指針。
㈦ C語言數組與函數
你的程序:
main()
{
int b[3];
b=pop();
}
int * pop()
{
int a[3],i;//定義的局部變數a[3]在調用完之後自動釋放其空間
for(i=0;i<3;i++)
a[i]=i;
return a;//返回的是指向數組a[3]的地址而不是數組a[3]本身
}
註:既然上面說到調用的方法返回的是指向數組a[3]的地址,所以主函數中b接收的應該是指向數組a[3]的地址,而數組a[3]在方法調用完後又被釋放了,所以b接收不到數組a[3],故出錯。
正確的程序:
#include<stdio.h>
main()
{
int b[3];
pop(b,3);
}
void pop(int a[],int n)//該方法傳入兩個參數,第一個是傳入指向數組的地址,第二個參數是傳入數組的長度,不需寫返回語句return,只需通過指向數組的地址的傳入就可以直接將數組b[]的值改變
{
int i;
for(i=0;i<n;i++)
a[i]=i;
}
㈧ c語言數組調用函數
平均列印用的%d應該用%f
㈨ c語言中能不能定義函數數組
函數不可以定義為數組,可以用函數指針來操作。
1.函數指針的數組定義方法:返回值類型( * 指針變數名[Number]) (形參列表)。
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
double div1(double a,double b){}
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函數指針的數組定義。
2.函數指針是指向函數的指針變數。 因而「函數指針」本身首先應是指針變數,只不過該指針變數指向函數。這正如用指針變數可指向整型變數、字元型、數組一樣,這里是指向函數。
C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變數後,可用該指針變數調用函數。
(9)c語言數組函數擴展閱讀:
指針函數和函數指針的區別:
這兩個概念都是簡稱,指針函數是指返回值是指針的函數,即本質是一個函數。我們知道函數都有返回類型(如果不返回值,則為無值型),只不過指針函數返回類型是某一類型的指針。其定義格式如下所示:返回類型標識符*函數名稱。
返回類型可以是任何基本類型和復合類型。返回指針的函數的用途十分廣泛。事實上,每一個函數,即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當於一個指針。比如函數返回一個整型值,實際上也相當於返回一個指針變數的值,不過這時的變數是函數本身而已,而整個函數相當於一個「變數」。
參考資料:網路 -函數指針
㈩ C語言數組的查找函數
#include<stdio.h>
int main()
{
int a[5];
int i,max,min;
printf("input number:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
max=a[0];
min=a[0];
for(i=0;i<5;i++){
if(a[i]>max)
max=a[i];
}
for(i=0;i<5;i++){
if(a[i]<min)
min=a[i];
}
for(i=0;i<5;i++){
printf("%d",a[i]);
printf(" ");
}
printf("\n");
printf("最大值為%d\n",max);
printf("最小值為%d\n",min);
return 0;
}