成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來(lái)到九壹網(wǎng)。
搜索
您的當(dāng)前位置:首頁(yè)C語(yǔ)言 用數(shù)組名作函數(shù)參數(shù)

C語(yǔ)言 用數(shù)組名作函數(shù)參數(shù)

來(lái)源:九壹網(wǎng)

當(dāng)用數(shù)組名作函數(shù)參數(shù)時(shí),如果形參數(shù)組中各元素的值發(fā)生變化,實(shí)參數(shù)組元素的值隨之變化。

1.數(shù)組元素做實(shí)參的情況:

如果已經(jīng)定義一個(gè)函數(shù),其原型為

void swap(int x,int y);

假設(shè)函數(shù)的作用是將兩個(gè)形參(x,y)進(jìn)行交換,現(xiàn)在有以下的函數(shù)調(diào)用:

swap (a[0],a[1]);

用數(shù)組元素做實(shí)參的情況,與用變量作實(shí)參的情況一樣,是“值傳遞”方式,將a[0]和a[1]的值單向傳遞給x和y。當(dāng)x和y的值改變時(shí)a[0]和a[1]的值并不改變。

2.數(shù)組名作函數(shù)形參的情況:

例如:定義一個(gè)函數(shù)fun,fun函數(shù)的形參寫(xiě)成數(shù)組的形式:

void fun(int arr[],int n);

但在程序編譯時(shí)是將arr按指針變量來(lái)處理的,相當(dāng)于函數(shù)fun應(yīng)寫(xiě)成:

void fun(int *arr,int n);
void fun(int arr[], int n)
{
	int s = sizeof(arr);
	printf("arr所占字節(jié)數(shù)為:%d\n", s);
}
int main()
{
	int brr[10];
	fun(brr, 10);
	return 0;
	
}

運(yùn)行結(jié)果:

【注意】

【例】定義一個(gè)數(shù)組名作形參的函數(shù),通過(guò)調(diào)用這個(gè)函數(shù)改變實(shí)參數(shù)組的值

int fun(int arr[], int n)
{
	//int s = sizeof(arr);
	//printf("arr所占字節(jié)數(shù)為:%d\n", s);

	int t;
	t = arr[1];
	arr[1] = arr[2];
	arr[2] = t;

	return arr[0];
}
int main()
{
	int brr[10] = { 1,3,2,4,5,6,7,8,9,10 };
	
	fun(brr, 10);

	for (int i = 0; i < 10; i++)
	{
		printf("%d  ", brr[i]);
	}

	return 0;
	
}

運(yùn)行結(jié)果:

常用這種方法通過(guò)調(diào)用一個(gè)函數(shù)來(lái)改變實(shí)參數(shù)組的值。

3.變量名做函數(shù)參數(shù)和用數(shù)組名做函數(shù)參數(shù)的比較

(1)當(dāng)實(shí)參類型是變量名時(shí),要求形參的類型也是變量名,通過(guò)形參傳遞的信息是變量的值,通過(guò)函數(shù)調(diào)用不能改變實(shí)參變量的值。

4.數(shù)組名和指針變量作為函數(shù)的形參

【例】將數(shù)組a中n個(gè)整數(shù)按相反順序存放,用一個(gè)函數(shù)inv來(lái)實(shí)現(xiàn)交換。實(shí)參用數(shù)組名a,形參可用數(shù)組名,也可用指針變量。

void inv(int x[], int n)//形參x是數(shù)組名
{
	int temp;
	int m = (n - 1) / 2;
	for (int i = 0; i <= m; i++)
	{
		int j = n - 1 - i;
		//把x[i]和x[j]交換
		temp = x[i];
		x[i] = x[j];
		x[j] = temp;
	}
	return;
}
int main()
{
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	inv(a, 10);//調(diào)用inv函數(shù)進(jìn)行交換
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
}

運(yùn)行結(jié)果:

改寫(xiě)代碼,將函數(shù)inv中得形參x改成指針變量:

void inv(int *x, int n)
{
	int temp;//定義一個(gè)中間變量,用來(lái)交換兩個(gè)變量得值
	int m = (n - 1) / 2;
	int* p;//定義一個(gè)指針變量p
	p = x + m;//p指向a[m]元素的地址
	int* i;//定義一個(gè)指針變量i
	i = x;//i指向數(shù)組首元素的地址
	int* j;//定義一個(gè)指針變量j
	j = x + n - 1;//j指向數(shù)組最后一個(gè)元素的地址
	for (i=x;i<=p;i++,j--)
	{
	//交換i和j所指向的數(shù)組元素的值
		temp = *i;
		*i = *j;
		*j = temp;
	}
	return;
}
int main()
{
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	inv(a, 10);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
}

運(yùn)行結(jié)果:

5.歸納分析
(1)形參和實(shí)參都用數(shù)組名
int fun(int x[],int n)
{
	.
	.
	.
}
int main()
{
	int a[10];
	.
	.
	.
	fun(a,10);
	.
	.
	.
	return 0;
}
(2)實(shí)參用作數(shù)組名,形參用指針變量
void fun(int *x,int n)
{
	.
	.
	.
}
int main()
{
	int a[10];
	.
	.
	.
	fun(a,10);
	.
	.
	.
	return 0;
}

實(shí)參a為數(shù)組名,形參x為int *型的指針變量,調(diào)用函數(shù)開(kāi)始后,形參x指向a[0],即x=&a[0],通過(guò)x值的改變,可以指向a數(shù)組的任一元素,如圖所示:

(3)實(shí)參形參都用指針變量
void fun(int *x,int n)
{
	.
	.
	.
}
int main()
{
	int a[10];
	int *p=a;
	.
	.
	.
	fun(a,10)
	.
	.
	.
	return 0;
}

實(shí)參p和形參x都是int*型指針變量。先使用實(shí)參指針變量p指向數(shù)組元素a[0],p的值是&a[0]。然后將p的值傳給形參變量x,x的初始值也是&a[0],通過(guò)x的值的改變可以使x指向數(shù)組a的任一元素,如圖所示:

(4)實(shí)參為指針變量,形參為數(shù)組名
void fun(int x[],int n)
{
	.
	.
	.
}
int main()
{
	int a[10];
	int *p=a;
	.
	.
	.
	fun(p,10);
	.
	.
	.
	return 0;
}
void inv(int* x, int n)
{
	int temp;
	int m = (n - 1) / 2;
	int* p;
	p = x + m;
	int* i;
	i = x;
	int* j;
	j = x + n - 1;
	for (i = x; i <= p; i++, j--)
	{
		temp = *i;
		*i = *j;
		*j = temp;
	}
	return;
}
int main()
{
	int a[10];
	int* p = a;//指針變量p指向a[0]
	//輸入數(shù)組a的元素
	for (int i = 0; i < 10; i++, p++)
	{
		scanf("%d", p);
	}
	p = a;//將指針變量p重新指向a[0]
	inv(p, 10);//調(diào)用inv函數(shù),實(shí)參是變量p
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

運(yùn)行結(jié)果:

上面的main函數(shù)中的指針變量p是有確定值的。如果在main函數(shù)中不設(shè)數(shù)組,只設(shè)指針變量,就會(huì)出錯(cuò)。假如把主函數(shù)修改如下:

void inv(int* x, int n)
{
	int temp;
	int m = (n - 1) / 2;
	int* p;
	p = x + m;
	int* i;
	i = x;
	int* j;
	j = x + n - 1;
	for (i = x; i <= p; i++, j--)
	{
		temp = *i;
		*i = *j;
		*j = temp;
	}
	return;
}
int main()
{
	int a[10];
	int* p;
	//輸入數(shù)組a的元素
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", p+i);
	}

	inv(p, 10);//調(diào)用inv函數(shù),實(shí)參是變量p
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", *(p+i));
	}
	return 0;
}

編譯時(shí)會(huì)出錯(cuò),原因是指針變量p沒(méi)有確定值,談不上指向哪個(gè)變量:

因此,下面這樣的使用是不正確的:

void fun(int x[],int n)
{
	.
	.
	.
}
int main()
{
	int *p;
	.
	.
	.
	fun(p,10);
}

【注意】如果指針變量做實(shí)參,必須先使指針變量有確定的值,指向一個(gè)已經(jīng)定義的對(duì)象。

【例】使用指針?lè)椒▽?duì)10個(gè)整數(shù)按由大到小的順序排列。
【思路】在主函數(shù)種定義數(shù)組a存放10個(gè)整數(shù),定義int*型指針變量p指向a[0]。定義函數(shù)sort使數(shù)組a種的元素由大到小的順序排列。在主函數(shù)中調(diào)用sort函數(shù),用指針變量p作實(shí)參。sort函數(shù)的形參用數(shù)組名。用選擇法進(jìn)行排序。

//定義sort函數(shù),x是形參數(shù)組名
void sort(int x[], int n)
{
	int temp;
	for (int i = 0; i < n-1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (x[j]>x[i])
			{
				temp = x[i];
				x[i] = x[j];
				x[j] = temp;
			}
		}
	}
}
int main()
{
	int a[10];
	int* p = a;//指針變量p指向a[0]
	//輸入10個(gè)整數(shù)
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", p++);
	}
	p = a;//指針變量p重新指向a[0]
	sort(p, 10);//調(diào)用sort函數(shù)
	//輸出排序后的10個(gè)數(shù)組元素
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", *p);
		p++;
	}
	return 0;
}

運(yùn)行結(jié)果:

如果sort函數(shù)中將x定義為指針變量,在函數(shù)中仍可以用x[i]和x[j]這樣的形式表示數(shù)組元素,它就是x+i和x+j所指的數(shù)組元素。

因篇幅問(wèn)題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2

違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬(wàn)商天勤律師事務(wù)所王興未律師提供法律服務(wù)