1.运行在操作系统上的应用程序,如果想要操作实体就必须通过操作系统的接口函数(API函数)进行操作。
2.句柄可以找到内存,但它不能操作内存。因为它是无类型的,对内存的解释能力不够。
3.函数的调用和返回值:
函数调用也就是主调函数使用被调函数,函数调用的一般形式为:函数名({实际参数表})
对无参函数调用时则无实际参数表。
实际参数表中的参数可以是常数,变量或其他构造类型数据及表达式。
各实参之间用逗号分隔。
当在主调函数发生调用关系时 计算机会发生以下动作:
(1)首先计算机自右至左依次求解主调函数实参的值。
(2)系统给形参分配临时存储单元。
(3)然后再自左至右把实参的值传给形参。
(4)执行被调函数。
对函数返回值的说明:
(1)函数的值只能通过return语句返回主调函数。
return语句的一般形式为:return 表达式;
该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,
但每次调用只能一个return语句被执行,因此只能返回一个函数值。
(2)函数值得类型和函数定义中函数的类型应保持一致。
(3)若函数值为整型,函数定义时可以省去类型说明。
(4)若被调函数中没有return语句,则函数带回的是一个不确定的值,没有实际意义。
不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。
4.下面一段代码:#include <stdio.h>
int *fun(int x)
{
static int a = x;
static int b = 10;
++a;
return &a;
}
void main()
{
for (int i = 10; i > 0; --i)
{
int *p = fun(i);
printf("%d ",*p);
}
printf("\n");
}
程序的运行结果:
11 12 13 14 15 16 17 18 19 20
而不是:
11 10 9 8 7 6 5 4 3 2
如果把fun函数中static int a=x;改为int a=x;则程序的运行结果为:11 10 9 8 7 6 5 4 3 2。为什么会这样呢?这是因为在fun函数中变量a被修饰为静态,而静态变量的初始化只初始化一次,当它第一次被调用时对它进行赋初值,静态变量的值是直接放在数据区的,不产生代码。
5.在计算中存取速度由快到慢的顺序为:寄存器==>CPU高速缓存==>内存==> 硬盘。
内存的主频和CPU的主频差异太大。
6.下面一段代码:
#include <stdio.h>
#include <string.h>
void main()
{
int ar[3][4] = {1,2,3,4,5,6,7};
int a=sizeof(ar);
int (*p)[4] = ar;
int b = *(*(p + 1) + 1);
}
b的值为6.