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

 

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