c语言学习总结(4)数组学习总结
1、数组不能相互赋值,如:a[5]=b[5]
数组不能作为函数的返回值如:void test(int a[5]) {...}
2、如果数组名放在=号的右边,那么这个数组会自动转换成数组首元素的指针。这样就可以解释上面为什么a[5]=b[5]是错误的赋值方式了,因为右边的b[5]自动转换成了指针,不能将指针赋值给数组。
比较: printf(%s ,str);和scaf(%s,&str);
前一个自动转换成指针进行传递,而第二个是输入的函数表达式需要使用&符号表示输入传递给一个指针类型。
3、看这样的调用:int array[5] = {};foo(array);
这里的使用方法不会报错,但是传递的不是一个数组类型的参数,而传递的是一个指针型的参数。
4、二维数组的存储实际上是连续存储的,比如:int a[3][2]={1,2,3,4,5};
5、Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables,and I won't usually need your flowcharts; they'll be obvious.
书写代码时要注意维护成本,选择正确的数据结构来组织信息。如:
#include <stdio.h>
void print_day(int day)
{
char days[8][10] = { "", "Monday",
"Tuesday", "Wednesday",
"Thursday","Friday",
"Saturday", "Sunday" };
if (day < 1 || day > 7)
printf("Illegal day number!\n");
printf("%s\n", days[day]);
}
int main(void)
{
print_day(2);
}
如果用switch语句或者if语句来写这个,想想看是多么的糟糕。