普通數組
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