C語言基礎 -46 函數_函數與一維數組

普通數組

book@100ask:~/C_coding/CH02$ cat arr.c
#include <stdio.h>

int main()
{
	int i;
	int a[] = {1,3,5,7,9};

	for(i = 0; i < sizeof(a)/sizeof(*a);i++)
		printf("%d ",a[i]);   //要想打印數組,必須知道數組名。數組名對應的數組存儲空間的首地址
	printf("\n");
}
book@100ask:~/C_coding/CH02$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH02$ ./arr
1 3 5 7 9 
book@100ask:~/C_coding/CH02$ cat arr.c
#include <stdio.h>

void print_arr(int *p)
{
	int i; 
	printf("%s:%d\n",__FUNCTION__,sizeof(p));   //此處接收的是指針,由於是64位系統,因此此處對應的數組sizeof(p)對應的是8個字節。
}

int main()
{
	int a[] = {1,3,5,7,9};
	printf("%s:%d\n",__FUNCTION__,sizeof(a));  //__FUNCTION__用於獲取函數名
	print_arr(a);
}


book@100ask:~/C_coding/CH02$ make arr
cc     arr.c   -o arr

book@100ask:~/C_coding/CH02$ ./arr
main:20     // 因爲數組a有5個元素,每個元素佔用4字節的空間,因此此處輸出爲20
print_arr:8   
book@100ask:~/C_coding/CH02$ cat arr.c
#include <stdio.h>

void print_arr(int *p,int n)
{
	int i; 
	printf("%s:%d\n",__FUNCTION__,sizeof(p));

	for(i = 0; i < n; i++)
		printf("%d ",*(p+i));
	printf("\n");
}

int main()
{
	int a[] = {1,3,5,7,9};
	printf("%s:%d\n",__FUNCTION__,sizeof(a));
	print_arr(a,sizeof(a)/sizeof(*a));     
// 一維數組傳參,傳遞數組名只是傳遞給了初始地址,此時被調用函數
//並無法對數組進行操作,必須同時把數組大小也傳遞過去。 數組大小 = sizeof(a)/sizeof(*a)        
}


book@100ask:~/C_coding/CH02$ make arr
cc     arr.c   -o arr


book@100ask:~/C_coding/CH02$ ./arr
main:20
print_arr:8
1 3 5 7 9 
book@100ask:~/C_coding/CH02$ cat arr.c
#include <stdio.h>

//void print_arr(int *p,int n)
void print_arr(int p[],int n)  //p[] 傳參,仍然等價於指針*p,一箇中括號等價於一個*
{
	int i; 
	printf("%s:%d\n",__FUNCTION__,sizeof(p));

	for(i = 0; i < n; i++)
		printf("%d ",*(p+i));
        //printf("%d ",p[i]); //該語句與“printf("%d ",*(p+i))” 等價
	printf("\n");
}

int main()
{
	int a[] = {1,3,5,7,9};
	printf("%s:%d\n",__FUNCTION__,sizeof(a));
	print_arr(a,sizeof(a)/sizeof(*a));
}


book@100ask:~/C_coding/CH02$ make arr
cc     arr.c   -o arr


book@100ask:~/C_coding/CH02$ ./arr
main:20
print_arr:8
1 3 5 7 9 
book@100ask:~/C_coding/CH02$ cat arr.c
#include <stdio.h>

void func(int *p,int n)
{
	int i,j,m,tmp;
	m = (n-1)/2;
	for(i = 0; i <= m; i++)
	{
		j = n-1-i;
		tmp = p[i];
		p[i] = p[j];
		p[j] = tmp;	
	}
}

int main(int argc, char **argv)
{
	int a[] = {1,3,5,7,9};
	int i;
	for(i = 0; i < sizeof(a)/sizeof(*a); i++)
		printf("%d ",a[i]);
	printf("\n");
	
	func(a,sizeof(a)/sizeof(*a));

	for(i = 0; i < sizeof(a)/sizeof(*a); i++)
		printf("%d ",a[i]);
	printf("\n");
}
book@100ask:~/C_coding/CH02$ make arr
cc     arr.c   -o arr
book@100ask:~/C_coding/CH02$ ./arr
1 3 5 7 9 
9 7 5 3 1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章