普通数组
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