T array[ N ]; //此处 T 可以是任何类型名,如 char,double,int 等。N 是一个正整数, //或值为正整数的常量表达式 那么,我们就定义了一个数组,这个数组的名字是 array。array 数组里有 N 个元素, 每个元素都是一个类型为 T 的变量。这 N 个元素在内存里是一个挨一个连续存放的。array 数组占用了一片连续的、大小总共为 N × sizeof(T)字节的存储空间。 下标如为小数时,编译器将自动去尾取整。
二维数组
T array[N][M]; // 此处 T 可以是任何类型名,如 char , double, int 等。M、N 都是 //正整数,或值为正整数的常量表达式 那么,我们就定义了一个二维数组,这个数组的名字是 array。array 数组里有 N×M 个元素,每个元素都是一个类型为 T 的变量。这 N×M 个元素在内存里是一个挨一个连续存 放的。array 数组占用了一片连续的、大小总共为 N×M×sizeof(T)字节的存储空间。
函数
int min(int x, int y); // 返回值类型为 int,有两个整型参数,函数名为 min
double calculate( int a, double b); // 返回值类型为 double,有一个整型参数,一个 double 型参数,函数名为 calculate
char judge(void); // 返回值类型为 char,没有参数,函数名为 judge
void doit(int times); // 返回值类型为 void,表示不返回任何值,有一个整型参数,函数名为 doit
如果定义: T * p ; // T 可以是任何类型的名字,比如 int, double ,char 等等。下文中碰到的 //“T ”也都是这个意思 那么变量 p 就是一个“指针变量”(简称 “指针”),p 的类型是 T *,表达式“ * p” 的类型是 T。而通过表达式“ * p”,我们就可以读写从地址 p 开始的 sizeof(T)个字节。 通俗地说,就是可以认为,“ * p”,这个表达式,等价于存放在地址 p 处的一个 T 类型的变量。表达示 “ * p”中的“ * ”,被称作“间接引用运算符”。
需要记住的是,不论 T 表示什么类型,sizeof(T *)的值都是 4。也就是说,所有指针变量,不论它是什么类型的,其占用的空间都是 4 个字节。
指针的通常用法是:将一个 T 类型的变量 x 的地址,赋值给一个类型为 T * 的指 针 p(俗称“让 p 指向 x”),此后表达式“* p”即代表 p 所指向的变量(即 x),通过“* p” 就能读取或修改变量 x 的值。 例如这样:
char ch1 = ’A’;// (1) char* pc =&ch1;// (2) 使得 pc 指向变量 ch1 * pc = ’B’;// (3) 执行效果是使得 ch1 = ’B’ char ch2 =* pc;// (4) 执行效果是使得 ch2 = ch1
pc =& ch2;// (5) 使得 pc 指向变量 ch2。 // 同一指针在不同时刻可以指向不同变量 * pc = ’D’;// 语句 6,执行效果是使得 ch2 = ’D’
总结一般的规律,如果定义: T ** p; // 此处 T 可以是任何类型名 那么 p 就被称作“指针的指针”。p 这个指针,其类型是 T ** ,而表达式“* p”的类 型是 T * ,“* p”表示一个类型为 T * 的指针。 同理,int *** p; int **** p; int ***** p ; 等,不论中间有多少个“*”,都是合法的定义。
不知道放在那里了,就放在这里叭
回车也是字符;
<1> 用辗转相除法求最大公约数 算法描述: m对n求余为a, 若a不等于0 则 m <- n, n <- a, 继续求余 否则 n 为最大公约数 <2> 最小公倍数 = 两个数的积 / 最大公约数 ;