例1 数组名作为函数形参
#include <stdio.h>
void test(int a[10])
{
printf("%lu\n", sizeof(a));
a[5] = 50;
}
int main ()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%lu\n", sizeof(a));
printf("-------------------\n");
test(a);
int i;
for(i = 0; i < 10; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
输出结果:
从上述结果可以看出:当一个数组名作为函数的形参的时候,其实是一个指针变量名
因此经常使用下面一种写法:
#include <stdio.h>
//void test(int a[10]) //这三种写法在C语言中表示的意思一样
//void test(int a[])
void test(int *a) //最常用的是最后一种写法
{
printf("%lu\n", sizeof(a));
a[5] = 50;
}
int main ()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%lu\n", sizeof(a));
printf("-------------------\n");
test(a);
int i;
for(i = 0; i < 10; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
输出结果:
例2 const保护示例
#include <stdio.h>
void test(const int *a) //为了不让函数内部修改数组成员的值
{
printf("%lu\n", sizeof(a));
//a[5] = 50;
}
int main ()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%lu\n", sizeof(a));
printf("-------------------\n");
test(a);
int i;
for(i = 0; i < 10; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
输出结果:
例3 const保护下被修改示例
#include <stdio.h>
void test(const int *a) //为了不让函数内部修改数组成员的值
{
printf("%lu\n", sizeof(a));
int *p = (int *)a; //强转
p[5] = 100;
//a[5] = 50;
}
int main ()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%lu\n", sizeof(a));
printf("-------------------\n");
test(a);
int i;
for(i = 0; i < 10; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
输出结果:
从上述结果可以看出:在const的保护下,数组中 a[5] 的值仍然被强制修改,说明在C语言中,const并不是绝对的。