c語言數組做形參
『壹』 c語言數組做形參定義語法
a如果是函數是可以的,x[]表示數組x的地址,int x[]等價於int *x
『貳』 數組作為實參和形參的形式是怎樣的
兩者都可以,可以用下面的程序展示。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void sortArray(int *a, int num)
//void sortArray(int a[], int num)
{
for (int i = 0; i < num; i++)
{
for (int j = i + 1; j < num; j++)
{
if (a[i] < a[j])
{
int tem = a[i];
a[i] = a[j];
a[j] = tem;
}
}
}
}
void printfArray(int *a, int num)
//void printfArray(int a[], int num)
{
for (int i = 0; i < num; i++)
{
printf("%d ", a[i]);
}
printf(" ");
}
/*
1、數組作為參數時,本質是指針,這是C語言的特點
2、數組作為參數時,裡面的數字有誤均可,對程序不影響
*/
void main()
{
int a[] = { 1, 2, 4, 5, 2, 53, 536, 263, 726, 37, 3 };
int num = sizeof(a) / sizeof(a[0]);
printf("數組排序前列印: ");
printfArray(a, num);
//開始對數組進行排序
sortArray(a, num);
printf("數組排序後列印: ");
printfArray(a, num);
system("pause");
}
(2)c語言數組做形參擴展閱讀:
用數組名作函數參數與用數組元素作實參有幾點不同。
1、用數組元素作實參時,只要數組類型和函數的形參變數的類型一致,那麼作為下標變數的數組元素的類型也和函數形參變數的類型是一致的。
2、在普通變數或下標變數作函數參數時,形參變數和實參變數是由編譯系統分配的兩個不同的內存單元。在函數調用時發生的值傳送是把實參變數的值賦予形參變數。在用數組名作函數參數時,不是進行值的傳送,即不是把實參數組的每一個元素的值都賦予形參數組的各個元素。
因為實際上形參數組並不存在,編譯系統不為形參數組分配內存。那麼,數據的傳送是如何實現的呢?在我們曾介紹過,數組名就是數組的首地址。
因此在數組名作函數參數時所進行的傳送只是地址的傳送,也就是說把實參數組的首地址賦予形參數組名。形參數組名取得該首地址之後,也就等於有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。
注意:
數組有兩個特殊的性質。一是不能復制數組;二是使用數組名字時,數組會自動轉化為指向其第一個元素的指針。由於數組不能復制,所以無法編寫使用數組類型形參的函數,因為數組會被自動轉化為指針。
『叄』 C語言中如何將二維數組作為函數的參數傳遞
在C語言中可以用二維數組作為實參或者形參。
1、函數中用二維數組作為形參,函數聲明中可以指定所有維數的大小,也可以省略第1維的維數如:
voidf(intarray[3][10]);//正確
voidf(intarray[][10]);//正確
上面的兩種二維數組形參表示都是正確的。
2、函數中用二維數組作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:
voidf(intarray[][]);//錯誤
因為從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:
voidf(intarray[3][]);//錯誤
3、二維數組作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的數據類型一致。比如定義如下函數:
voidf(intarray[][10]);
可以將如下數組傳遞給函數f。
inta[2][10]={1,2,3,4};
intb[4][10]={1};
『肆』 如何在C語言中以數組指針作為形參輸出數組
數組 與 普通指針 的區別:
1、指針的本質是一個與地址相關的復合類型,它的值是數據存放的位置(地址);數組的本質則是一系列的變數。
2、數組名對應著(而不是指向)一塊內存,其地址與容量在生命期內保持不變,只有數組的內容可以改變。指針可以隨時指向任意類型的內存塊,它的特徵是"可變",所以我們常用指針來操作動態內存。
3、當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指針。
因為第三條,當把數組名作為函數的形參進行傳遞時,該效果等同於傳遞一個同類型的指針。直接在程序當中調用 函數名(數組名)即可。
常式:
#include<stdio.h>
inta[]={1,2,3,4,5,6};
voidprint(inta[]){//數組指針作為形參
for(i=0;i<6;i++)printf("%d",a[i]);//輸出數組
}
intmain(){
print(a);//傳入數組名
return0;
}
『伍』 c語言怎麼將數組作為函數參數傳入
一維數組的元素作為函數實參,與同類型的簡單變數作為實參一樣,是單向的值傳遞,即數組元素的值傳給形參,從而形參是改變不影響實參
數組名代表著整個數組的地址,如果一維數組的名字作為函數實參,傳遞的是整個數組,即形參數組和實參數組完全相同,是存放在同一存儲空間的同一個數組。這樣形參數組
修改時,實參數組也同時被修改了。形參數組的元素個數可以省略。
#include<stdio.h>
//數組作為函數參數,可以省略元素個數
//數組作為函數參數,傳遞是整個數組的地址,修改了函數形參數組元素的值,會影響到外面的實參數組
void change(int array[])
{
printf("array ==%p\n",array);
array[0] = 100;
}
int main()
{
int ages[6] = {10,11,13,15,11,18};
printf("array ==%p\n",ages);
change(ages);
printf("%d\n",ages[0]);
return 0;
}
輸出結果為: array ==0x7fff5be26c00
array ==0x7fff5be26c00
100
『陸』 在c語言中的變數聲明中,實參傳遞給形參用數組怎麼表示
數組作為形參,傳遞的是能夠代表一個維度的數組的數組名,也就是地址。所以形參只能是一維數組的形式(當然可以是用指針表示的)。而實參可以是一維數組,也可以使多為數組的某一維的數組名。下面是定義的兩中普通函數的形式(假設傳遞的是整形的數組)
void
function(int
a[]){}
void
function(int
*
a){}
『柒』 c語言c++語言如何用二維數組做形參
C/C++中,二維數組的第一維的每一個元素都是一維數組。所以,用指向一維數組的指針或用第一維維數空缺的二維數組作為函數的形式參數都能達到目的。設處理數組為int型,舉例代碼如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
voidmyprint(int(*p)[5]){//p是指向有5個int型元素的一維數組的指針
//voidmyprint(intp[][5]){//這樣寫效果是一樣的
inti,j;
for(i=0;i<3;i++){
for(j=0;j<5;printf("%3d",p[i][j++]));
printf(" ");
}
}
intmain(void){
inta[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
myprint(a);
return0;
}
『捌』 C語言中用數組做為形參為什麼形參改變時實參也要變
c語言中數組名作為實參傳給被調用的函數時,形參獲得的是數組的起始地址。
還是用例子說話吧。
#include
int
*arry(int
*a)
{
int
*b;
b
=
a;
int
i;
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
return
b;
}
int
main()
{
int
a[5]
=
{1,2,3,4,5};
int
*c;
int
i;
c
=
arry(a);
for(i=0;i<5;i++)
{
printf("%d",c[i]);
}
}
主要是通過指針把數組,例如main裡面的a的地址傳入arry函數,然後在arry函數中用一個兼容類型的指針接收地址,然後就可以再這個指針下的地址操作地址上面的數據了。
arry返回的時候也是返回一個指針(地址)。
『玖』 C語言中關於字元數組做形參的問題~菜鳥求救~
void cnect(char strn1[8],char strn2[4],char strn3[13],int l1,int l2)
{
int i,k,t;
for(i=0;i<l1;i++)
strn3[i]=strn1[i];
for(k=0;k<l2;k++)
{
t=i+k+1;
strn3[t]=strn2[k];
}
strn[12]='\0';//////////////////////////////////這里加上\0(空字元)字元,結尾字元串;
}
我用的VC++,沒用過TC
問題2
char str1[]={"I love "},str2={"you"},str3[13];
改str2[]=「you」;
也要字元末尾沒加空字元吧