上述选项中,return只能返回一个数字。 函数可以嵌套调用,不可以嵌套定义。 实参和形参可以相同。 函数可以先声明再使用,定义可以放在后面。 函数定义是说明函数怎么实现的。 传值调用时形参不能操作实参,传址调用时形参可以操作实参。 两个括号内的内容是逗号表达式,结果分别是v2和v4,加上后面的v5、v6一共4个实参。 高内聚低耦合是判断软件设计好坏的标准。 函数中尽可能少的使用全局变量,以免代码修改混乱失控。 函数参数过多时传参时可读性差,尽量不要超过4~5个。 函数中资源谁申请谁释放,避免资源浪费。 ::: tip 内聚性又称块内联系。 指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。(可以理解为模块独立性强,可以独立完成一个功能) 耦合性也称块间联系。 指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。(可以理解为模块之间可以相互调用,但不会有功能上的交叉) ::: 函数可以没有返回值(void)。 函数参数可以是数组等。 库函数是封装好的使用include调用的,和自定义函数没有关系。 函数放在哪里调用都可以。 定义在函数内部的变量是局部变量,作用范围只在该函数内部。 栈上保存的是局部变量。 函数内复合语句中定义的变量只在这个复合语句内有效。 如下: A是不完全初始化;B可以不指定大小;C不能使用小括号;D初始化了一个元素。 二维数组不能省略列,只能省略行。 C在初始化时,实际初始化了3行,但是在定义时只定义了2行。 D中初始化行时写了两个逗号,不符合规则。 C中a[10]越界。数组中元素赋值时可以使用语句赋值运算结果。 两行三列的数组中,第四个数字应该在第二行第一列,放在数组中应该是a[1][0]。 题目中的数组里,括号内是一个数组表达式,运算结果是4,即arr[]={1,2,4,5}。数组arr中有4个int类型的元素,大小为4*4=16字节。 求数组大小sizeof需要包含数组中的\0,求字符串长度strlen计算到\0为止。 ::: warning 两种数组写法对sizeof结果的影响: 在数组中放进一串元素: 在数组中放进一个字符串: ::: 随着数组下标的有小变大,地址是由低到高的。
#include <stdio.h>
void Init(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
}
}
void Print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
}
void Reverse(int arr[], int sz)
{
int tmp = 0;
int left = 0;
int right = sz - 1;
while (left <= right)
{
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
//Init(arr, sz);
Print(arr, sz);
Reverse(arr, sz);
printf("\n");
Print(arr, sz);
return 0;
}
12345678910
10987654321
::: warning 数组名是首元素的地址,数组的交换不能通过引入第三个数组进行直接交换。 ::: 1.使用一个变量进行交换: 2.使用一个第三方数组交换: ::: tip 上述引入一个第三方数组交换中,arr数组的大小在定义时需要指定,数组创建时不能使用变量指定大小。 ::: 上述代码是错误的,在不同的编译器中得到的结果不同。 整型在64位系统中是4个字节。 上述代码中将arr数组的首元素地址强制类型转换成short* 交给指针p,p每+-1,移动两个字节。第一个for循环中,循环4次,p从0开始每次+1然后解引用,即每次改变两个字节指向的位置的值,p+0和p+1解引用后值改为0,即将数组arr中第一个元素的四个字节分两次置为0,即arr[0]的值被置为0,arr[1]同上。 第一个for循环完成后,第二个for循环打印数组中元素。arr[0]和arr[1]被置为0,其余元素未被操作,所以打印出来值为0 0 3 4 5。 变量a中存放着11 22 33 44一共4个字节(在内存中的存储顺序是44 33 22 11)a的地址交给pc,pc的类型是char*,*pc=0指的是将a在内存中的第一个字节置为0,即00 33 22 11,打印出来的顺序是11 22 33 00。 ::: warning 全局变量不初始化默认为0。 局部变量不初始化默认为随机值。
sizeof返回的值是一个无符号数。 ::: 上述代码中,sizeof计算变量/类型所占大小,计算结果恒>=0,返回的是一个无符号数,负数在和无符号数进行比较时,会先将-1转换为无符号数。负数转变为无符号数时,最高位的1就不是符号位而是有效位了,这个数字就会变为一个很大的数,一定会比sizeof(i)大。