第4章 栈和队列

Size: px
Start display at page:

Download "第4章 栈和队列"

Transcription

1 期中考试成绩统计结果 ( 平均 :68)

2 第 9 讲指针与引用 (Part I) 周水庚 2017 年 11 月 23 日

3 提要 指针 指针和数组

4 提要 指针 指针和数组

5 指针与指针的作用 指针是 C 语言中用于表示程序对象地址的一类数据 指针的作用 间接引用它所指的对象 描述数据和数据之间的关系, 以便构造复杂的数据结构 利用各种类型指针形参, 能使函数增加活力 指针与数组结合, 使引用数组元素的形式更加多样 访问数组元素的手段更加灵活 熟练正确应用指针能写特别紧凑高效的程序

6 变量地址与变量内容 程序中的变量在内存中占据一定的存储单元, 存储单元的开始地址称为变量的地址, 在存储单元中存储的数据称为变量的内容 数据对象在程序中用变量与其对应, 程序用变量定义引入变量 指定变量的类型和名 编译系统根据类型确定变量所需的内存空间的字节数量和它的值的表示形式, 检查程序对变量操作的合法性, 对合法的操作翻译出正确的计算机指令 变量的名供程序引用它, 程序按名引用变量的内容或变量的地址

7 变量地址与变量内容 int X int Y int Z int *px int *py int *pz

8 变量地址与变量内容 ( 续 ) 对于代码 : int x = 1; x = x + 2 x = x+2; 中的第一个 x 表示引用变量 x 的地址 ; 第二个 x 表示引用变量 x 的内容 该语句的意义是 : 完成取 x 的内容, 加上 2 的计算, 并将计算结果存入变量 x 的地址所对应的单元中 在程序执行时, 源程序中按名对变量的引用, 已被转换成按地址引用, 利用变量的地址或取其内容或存储值

9 指针变量 指针变量是指取地址值的变量, 用于存放某个变量的地址 当指针变量 p 的值为变量 v 的地址时, 就说指针变量 p 指向变量 v 为了便于类型检查, 一种指针变量所指向的变量类型在定义指针变量时说明

10 指针变量定义 指针变量定义的一般形式 : 类型 * 标识符 ; 标识符是指针变量的名 标识符之前的符号 * : 表示该变量是指针变量 最前面的 类型 : 该指针变量所指向的程序对象的类型 例句 :int i, *ip; 定义一个整型变量 i 和一个指向 int 型变量的指针变量 ip 定义指针变量时也可指定初值 int j; int *intpt = &j; 定义整型指针变量 intpt 时, 初始化它为整型变量 j 的地址

11 指针变量及其所指向的变量 运算符 &: 取变量的地址 &x 的值就是变量 x 的地址 给定指针变量 p 和整型变量 x, 若 p=&x, 则 x 是 p 所指向的变量 变量的地址可作为一种值被存储和运算 除能按名引用变量外, 也可用变量的地址引用变量 按变量名引用变量称为直接引用 将变量 A 的地址赋给指针 B, 借助于指针变量 B 引用变量 A 称为对 A 的间接引用

12 有关指针的几个概念 int i, *ip=&i; 指针类型 :int * 指针所指向的类型 :int 指针的值或者指针所指向的内存区开始地址 &i, 即存储 i 的开始地址 指针所指向的变量的值或者指针所指向的地址空间所存储的值 i 的值 指针本身存储空间即存储指针所占据的内存区 存储 ip 所占有的内存空间, 其地址为 &ip

13 指针类型 把指针定义语句里的指针名字去掉, 剩下的部分就是这个指针的类型 这是指针本身所具有的类型 例如 int *ptr; // 指针的类型是 int * char *ptr; // 指针的类型是 char * int **ptr; // 指针的类型是 int ** int (*ptr)[3]; // 指针的类型是 int(*)[3] int *(*ptr)[4]; // 指针的类型是 int *(*)[4]

14 指针指向的类型 把指针定义语句中的指针名字和名字左边的指针声明符 * 去 掉, 剩下的就是指针所指向的类型 例如 int *ptr; // 指针所指向的类型是 int char *ptr; // 指针所指向的类型是 char int **ptr; // 指针所指向的类型是 int * int (*ptr)[3]; // 指针所指向的类型是 int()[3] int *(*ptr)[4]; // 指针所指向的类型是 int *()[4] 通过指针来访问指针所指向的内存区时, 指针所指向的类型 决定了编译器将把那片内存区里的内容当做什么来看待

15 指针的值 指针的值, 或者叫指针所指向的内存区地址, 是指针本身在内存区的值 这个值将被编译器当作一个地址, 而不是一个一般的数值 在 32 位程序里, 所有类型的指针的值都是一个 32 位整数, 因为 32 位程序里内存地址全都是 32 位长

16 指针的值 指针所指向的内存区就是从指针的值所代表的那个内存地址开始, 长度为 sizeof( 指针所指向的类型 ) 的一片内存区 我们说一个指针的值是 xxxx, 就相当于说该指针指向了以 xxxx 为首地址的一片内存区域 我们说一个指针指向了某块内存区域, 就相当于说该指针的值是这块内存区域的首地址 指针所指向的内存区和指针所指向的类型是两个完全不同的概念 int *p; p 所指向的类型已经有了, 但由于指针还未初始化, 所以它所指向的内存区是不存在的, 或者说是无意义的

17 指针本身所占据的内存区 指针本身占了多大的内存, 可以用函数 sizeof( 指针的类型 ) 获得 在 32 位平台里, 指针本身占据了 4 个字节的长度 #include <stdio.h> void main() { char ch,*chp; chp=&ch; printf("&ch1=0x%\nchp=0x%x\n",&ch, chp); } 结果为 : &ch=0x12ff7c chp=0x12ff7c

18 运算符 & 和 * & 是取地址运算符 ;* 叫 间接运算符 &a 的运算结果是一个指针, 指针的类型是 a 的类型加个 *, 指针所指向的类型是 a 的类型, 指针所指向的地址是 a 的地址 *p 的结果是 p 所指向的东西, 它的类型是 p 指向的类型, 它所占用的地址是 p 所指向的地址

19 空指针 空指针表示 未分配 或者 尚未指向任何地方 的指针, 用 null 表示 空指针在概念上不同于未初始化的指针 空指针可以确保不指向任何对象或函数 ; 而未初始化指针则可能指向任何地方 每种指针类型都有一个空指针, 而不同类型的空指针的内部表示可能不尽相同 尽管程序员不必知道内部值, 但编译器必须时刻明确需要那种空指针, 以便在需要的时候加以区分

20 指针表达式 一个表达式的最后结果如果是一个指针, 那么这个表达式就叫指针表达式 下面是一些指针表达式的例子 int a,b; int array[10]; int *pa; pa=&a;//&a 是一个指针表达式 int **ptr=&pa;//&pa 也是一个指针表达式 *ptr=&b;//*ptr 和 &b 都是指针表达式 pa=array; pa++;// 这也是指针表达式

21 指针类型转换 如果有一个指针 p, 我们需要把它的类型和所指向的类型改为 TYPE * 和 TYPE, 那么语法格式是 :(TYPE *)p; 这样强制类型转换的结果是一个新指针, 该新指针的类型是 TYPE *, 它指向的类型是 TYPE, 它指向的地址就是原指针指向的地址 而原来的指针 p 的一切属性都没有被修改

22 指针类型转换 int a=123, b; int *ptr=&a; char *str; b=(int)ptr;// 把指针 ptr 的值当作一个整数取出来 str=(char *)b;// 把这个整数的值当作一个地址赋给指针 str

23 指针的安全问题 char s= a ; int *ptr; ptr=(int *)&s; *ptr=1024; Before *ptr=1024 a After *ptr= 指针 ptr 是一个 int* 类型的指针, 它指向的类型是 int, 它指向的地址就是 s 的首地址 在 32 位程序中,s 占一个字节, int 类型占四个字节 最后一条语句不但改变了 s 所占的一个字节, 还把和 s 相临的高地址方向的三个字节也改变了!

24 使用指针变量注意事项 不能将一个不能指的对象的地址赋给指针变量 int i = 100, j, *ip, *intpt; float f, *fp; ip = 100; /* 错! 指针变量不能赋整数值 */ intpt = j; /* 错! 指针变量不能赋整型变量的值 */ fp = &i; /* 错! float* 类型变量, 不能指向 int 型变量 */ fp = ip; /* 错! 不同类型指针变量不能相互赋值 */

25 使用指针变量注意事项 ( 续 ) 以下都是正确的赋值 : ip = &i ; /* 使 ip 指向 i */ intpt = ip ; /* 使 intpt 指向 ip 所指变量 */ fp = &f ; /* 使 fp 指向 f */ ip = NULL ; /* 使 ip 不再指向任何变量 */ 以上例子说明 : 同类型的指针变量可以相互赋值 ; 只能赋指针变量能指向的程序对象地址给指针变量

26 使用指针变量注意事项 ( 续 ) 当指针变量明确指向一个对象, 它的值不是 NULL 时, 可以用运算符 *, 引用指针变量所指向的对象 如 ip = &i; j = *ip; 实现将指针变量 ip 所指变量的内容 ( 即变量 i 的内容 ) 赋给变量 j 其中, 赋值号右边的 *ip 表示引用 ip 所指变量的内容 上述赋值等价于 : j = i; 语句 *ip = 200; 实现向指针变量 ip 所指变量 ( 即变量 i) 赋值 200 赋值号左边的 *ip 表示引用 ip 所指变量 上述赋值等价于 i = 200; int *p, i=10; *p=10; /* 错!P 指向未定 */

27 使用指针变量注意事项 ( 续 ) 记号 * 指针变量名 与指针变量所指变量的 变量名 等价 如 : ip=&i; intpt = &j; *intpt = *ip+5; 与语句 j = i+5; 等价 要特别注意指针变量之间的赋值与指针变量所指向的变量之间的赋值在表示方法上的区别 如 intpt = ip; 使两个指针变量 intpt 与 ip 指向同一个对象, 或都不指向任何对象 ( 如果 ip 的值为 NULL)

28 使用指针变量注意事项 ( 续 ) i=100; j=200; ip=&i; intp=&j; intp=ip; ip i ip i intp j intp j

29 使用指针变量注意事项 ( 续 ) i=100; j=200; ip=&i; intp=&j; *intp=*ip; ip i ip i intp j intp j

30 使用指针变量注意事项 ( 续 ) 定义指针变量, 使它指向某变量, 并通过指针变量引用它所的指变量 : int a = 100, x = 2, *intp = &a; x += *intp; *intp *= x; 改变指针变量的值, 就改变了它的指向, 从而实现同样的表示形式能间接引用不同的变量 指针变量最主要的应用有两个方面 让指针变量指向数组的元素, 以便逐一改变指针变量的指向, 遍历数组的全部元素 让函数设置指针形参, 让函数体中的代码通过指针形参引用调用环境中的变量

31 使用指针变量注意事项 ( 续 ) 指针变量定义与引用指针变量所指对象采用相似的标记形式 (* 指针变量名 ), 但它们的作用与意义是完全不同的 在指针变量定义中 ( 如 int *ip;), 指针变量名之前的符号 * 说明其随后的标识符是指针变量名 如指针变量定义时带有初始化表达式, 如 int i, *ip = &i; 初始化表达式的地址是赋给指针变量本身, 而不是指针变量所指对象 在初始化之前, 指针变量还未指向任何对象

32 使用指针变量注意事项 ( 续 ) 通过某个指向变量 i 的指针变量 ip 引用变量 i 与直接按其名 i 引用变量 i, 效果是相同的 如有 int i, *ip = &i; 则凡变量 i 能使用的地方,*ip 一样能用 因单目运算符 * & ++ 和 - - 是从右向左结合的 注意分清运算对象是指针变量 还是指针变量所指对象 如有 int i, j, *ip = &i ; 语句 j = ++*ip; 相当于 *ip=*ip+1; j= *ip; j = *ip++; 相当于语句 j = *ip; ip++;

33 使用指针变量注意事项 ( 续 ) j = (*ip)++; 不同于 j = *ip++ 前者是先引用 ip 所指向的对象, 取该对象的内容赋给 j, 并让该对象的内容增加 1 个单位 后者是将原来 ip 指向的值赋予 j, 然后 ip 本身增加了 1 个单位

34 提要 指针 指针与数组

35 指针与数组的区别 指针是与地址相关的类型, 它的值是数据存放的位置 ( 地址 ); 数组则是一系列的变量 数组名对应着 ( 而不是指向 ) 一块内存, 其地址与容量在生命期内保持不变, 只有数组的内容可以改变 指针可以随时指向任意类型的内存块, 它的特征是 可变, 所以常用指针来操作动态内存 当数组作为函数的参数进行传递时, 该数组自动退化为同类型的指针 整数数组 a a[0] 和 &a 的区别 a = &a[0] 对数组 a 的直接引用将产生一个指向数组第一个元素的地址 &a 的结果则产生一个指向整个数组的地址, 相当于一个二级地址的值 &a=&a[0]=a

36 指针与一维数组 指向一维数组元素的指针 当指针变量指向一维数组的元素时, 就可用指针引用数组的元素 设有以下变量定义 int a[100], *p; 赋值运算 p = &a[0] 使 p 指向 a[0] 表示 &a[0] 还有更简洁的方法, 即数组名 a

37 指向一维数组元素的指针 对指向一维数组元素的指针允许作有限的运算 设有以下代码 int *p, *q, a[100]; p = &a[10]; q = &a[50]; 当两个指针指向同一个数组的元素时, 这两个指针可以作关系比较 (<,<=, ==,>, >=,!=) 若两指针 p 和 q 指向同一个数组的元素, 则 p==q 为真表示 p,q 指向数组的同一个元素 ; 若 p<q 为真, 表示 p 所指向的数组元素的下标小于 q 所指向的数组元素的下标 如对上述代码 p<q 为真

38 指向一维数组元素的指针 ( 续 ) 对指向一维数组元素的指针允许作有限的运算 ( 续 ) 指向数组元素的指针可与整数进行加减运算 由数组元素在内存中顺序连续存放的规定以及地址运算规则, 表达式 a+1 为 a[1] 的地址,a+2 为 a[2] 的地址 一般地, 表达式 a+i 为 a[i] 的地址 把这个结论应用于指向数组元素的指针, 同样成立 若 p 的值为 a[0] 的地址, 则表达式 p+i 的值为 a[i] 的地址 或者说, p+i 的值为指向 a[i] 的地址值 若 p 指向数组元素 a[10], 则 p+n 就表示指向数组元素 a[10+n] 这里,n 是任意的整数表达式 当指针变量指向数组 a 的元素时, 不论数组元素的类型是什么, 指针和整数 n 进行加减运算, 指针值向前或向后移动 n 个元素位置

39 指向一维数组元素的指针 ( 续 ) 对指向一维数组元素的指针允许作有限的运算 ( 续 ) 当两个指针指向同一个数组的元素时, 允许两个指针作减法运算, 其绝对值等于两指针所指数组元素之间相差的元素个数 利用运算符 * 可引用指针所指对象,*(a+i) 表示引用 a+i 所指向的数组元素 a[i] 这样 *(a+i) 就是 a[i] 对于指向数组元素的指针变量 p, 若 p 指向 a[10],*(p+i) 表示引用 p+i 所指向的数组元素 a[10+i] 与用数组名和下标引用数组元素的标记法相一致, 指向数组元素的指针变量也可带下标引用数组的元素, 即 *(p+i) 也可写成 p[i] 若 p = &a[10], 则 p[i] 引用的是 a[10+i], p[-2] 引用的是 a[8]

40 指向一维数组元素的指针 ( 续 ) int a[8]; a 0 int *p = a + 1; 1 p a+4 i=3 p+i(=a+i+1) 7 指向一维数组元素的指针与数组元素位置之间的关系

41 指向一维数组元素的指针 ( 续 ) 引用一维数组元素有以下三种形式 用数组元素的下标引用数组元素, 如 a[5] 利用数组名表达式的值是数组首元素地址的约定, 以地址表达式引用表达式所指的元素, 如 *(a+i)=a[i] 利用指向数组元素的指针变量, 用它构成指向数组元素的指针表达式, 并用该表达式引用数组元素 如 *(p+i) 或 p[i] 注 : 用数组名 a 表达数组元素地址与用指向数组元素的指针 p 来表达数组元素的指针, 在实际应用上有区别 p 是变量, 其值可改变, 如 p++; 数组名 a 只代表数组 a 的首元素的指针, 是不可改变的, 程序只能把它作为常量使用

42 指向一维数组元素的指针样例 -1 利用指针遍历数组, 输入生成一个数组和将已知数组复制到另一个数组 int a[100], b[100], *p, *q; for(p = a; p < a + 100;) scanf( %d, p++); for(p = a, q = b; p < a + 100;) *q++ = *p++;

43 指向一维数组元素的指针样例 -2 引用数组元素各种不同方法的示意程序 #include <stdio.h> int a[] = {1, 2, 3, 4}; void main() {int j, *p; for(j = 0; j < 4; j++) printf( a[%d]\t=%d\t,j,a[j]); printf( \n ); for(p = a; p <= &a[3]; p++) printf( *p\t=%d\t, *p); printf( \n ); for( p=a, j==0; p+j<a+4; j++) printf( *(p+%d)\t=%d\t, j, *(p+j)); printf( \n ); for( p=a+3,j=3;j>=0;j--) printf( p[-%d]\t=%d\t, j, p[-j]); printf( \n ); }

44 指向字符串的指针 为字符串常量提供存储空间有两种方法 把字符串常量存放在一个字符数组中 例如, char s[] = "I am a string."; 由编译系统将字符串常量与程序中出现的其他常量一起存放在常量存储区中 例如, char *cp1, *cp2 = "I am a string"; cp1 = Another string ; 程序为了能访问存于常量存储区中的字符串常量, 可用一个字符指针指向它的第一个字符 当字符串常量出现在表达式中时, 系统将字符串常量放入常量存储区, 而字符串常量转换成指向该字符串常量存储单元的第一个字符的字符指针

45 指向字符串的指针 ( 续 ) 系统预定义了许多用于字符串处理的库函数, 程序可以用字符串常量或指向某字符串的指针调用这些库函数 如调用库函数 strlen() 求一字符串常量的长度 strlen("i am a string.") 该函数调用的结果是 14, 表示此字符串常量由 14 个有效字符组成 如 s 是一个字符数组, 其中已存有字符串 ;cp 是一个字符指针变量, 它指向某个字符串的首字符, 则 代码 :printf( %s\n, s); 输出存于字符数组 s 中的字符串 代码 :printf( %s\n, cp); 输出以字符指针变量 cp 所指字符为首字符的串字符串

46 指向字符串的指针示例 -1 将一个已知字符串复制到一个字符数组, 设 from 为已知字符串的首字符指针,to 为存储复制字符串的字符数组首元素的指针 若用下标引用数组元素标记法, 完成复制的代码可写成 k = 0; while ((to[k] = from[k])!= \0 ) k++; 如采用字符指针描述有 while ((*to++ = *from++)!= \0 ); 由于字符串结束符 \0 的值为 0, 上述测试当前复制字符不是字符串结束符的代码中,!= \0 是多余的, 字符串复制更简洁写法是 while (*to++ = *from++);

47 指向字符串的指针示例 -2 将字符串 s 中的某种字符去掉, 设要去掉的字符与字符变量 c 中的字符相同 采用一边考察字符一边复制 引入两个字符指针 p 和 q,p 指向当前正考察的字符,q 指向下一个用于存储复制字符的位置 若 p 所指字符与 c 不相同, 则将它复制到新字符串 否则, 该字符不被复制 每复制一个字符 q 才增 1,p 是每考察一个字符就增 1 for(p = q = s; *p; p++) if (*p!= c) *q++ = *p; /* 复制 */ *q= \0 ; /* 重新构成字符串 */

48 指向二维数组的指针 如果有一个二维数组, 且指针变量所指的是二维数组中的一整行, 则指针变量另有一些很有意义的性质 设二维数组为 int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 这里, 数组 a 有 3 行 4 列 按行来看数组 a, 数组 a 有三个元素, 分别为 a[0],a[1],a[2] 它们又分别是一个一维数组, 各有 4 个元素 例如,a[0] 所代表的一维数组为 a[0][0] a[0][1] a[0][2] a[0][3]

49 指向二维数组的指针 ( 续 ) 指针变量指向二维数组中一整行 与一维数组名可看作数组的第一个元素 ( 下标为 0) 的地址的约定相一致, 二维数组名 a 可以看作 a 的首元素 a[0] 的地址, 即表示二维数组第一行的首地址 一般地,a+i 可以看作数组 a 的元素 a[i] 的地址, 即二维数组第 i+1 行的首地址 所以,a+i=&a[i]; 即 *(a+i)=a[i] 因二维数组 a 能用 a[0],a[1],a[2] 分别表示其中的一维数组, 所以 a[0] 能表示用 a[0] 表示的一维数组的首元素 a[0][0] 的地址 ;a[1] 能表示用 a[1] 表示的一维数组的首元素 a[1][0] 的地址 一般地,a[i] 能表示用 a[i] 表示的一维数组的首元素 a[i][0] 的地址 所以, a[i]=&a[i][0]; a[i]+j=&a[i][j]; 即 *a[i]=a[i][0]; *(a[i]+j)=a[i][j] 综上,a 和 a+i 就是地址的地址 a 相当于二级地址 **a=a[0][0]; *(a+i)=a[i]; *(a[i]+j)=a[i][j] ; *(*(a+i)+j)=a[i][j]

50 指向二维数组的指针 ( 续 ) 指针变量指向二维数组中一整行 ( 性质续 ) a[i] 表示用 a[i] 表示的一维数组的首元素 a[i][0] 的地址 因 a[i] 可写成 *(a+i),a[i] 或 *(a+i) 表示二维数组 a 的元素 a[i][0] 的地址, 即 &a[i][0] 根据地址运算规则,a[i]+j 即代表数组 a 的元素 a[i][j] 的地址, 即 &a[i][j] 因 a[i] 与 *(a+i) 等价, 所以 *(a+i)+j 也与 &a[i][j] 等价

51 指向二维数组的指针 ( 续 ) 指针变量指向二维数组中一整行 ( 性质续 ) 数组元素 a[i][j] 有以下三种等价表示形式 : *(a[i]+j) *(*(a+i)+j) (*(a+i))[j] 特别地,a[0][0] 等价表示形式有 : *a[0] 和 **a 数组元素 a[i][j] 的地址也有三种等价表示形式 a[i]+j *(a+i)+j &a[i][j]

52 二维数组与指针图示 int a[m][n]; n-2 n-1 a a[0] a[1].... a[m-1].

53 数组指针 : 指向数组的指针 定义指向数组的指针变量, 如 :int (*p)[4]; 定义指针变量 p 能指向一个由四个 int 型元素组成的数组 以上定义中, 圆括号是必需的, 否则 int *p[4]; 定义为一个指针数组 p, 即 p 有四个元素, 每个元素是一个指向整型变量的指针 p 是一个指向由四个整型元素组成的数组, 对 p 作增减 1 运算, 就表示向前进或向后退四个整型元素 如有变量定义 : int a[3][4], (*p)[4]; p = a ; 使 p 指向二维数组 a 的第 1 行 p+1 的指针值为指向二维数组 a 的第二行 若 p = a, 则 p+i 指向二维数组 a 的第 i+1 行, 与 a+i 一样 同二维数组元素的地址计算规则相对应,*p+j 指向 a[0][j]; *(p+i)+j, 或者 p[i]+j 指向数组 a 的元素 a[i][j], 即 *(p+i)+j=p[i]+j=&a[i][j] 所以, 有 *(*(p+i)+j)=*(p[i]+j)=p[i][j]=a[i][j]

54 数组指针 : 指向数组的指针 ( 示例 ) 指向数组元素的指针和指向数组的指针的区别示意程序 #include <stdio.h> void main() { int a[3][4] = { { 1, 3, 5, 7}, { 9, 11, 13, 15}, {17, 19, 21, 23}}; int i, *ip, (*p)[4]; p = a+1; ip = p[0]; /* *(p+i)=p[i] */ for(i = 1; i <= 4; ip += 2, i++) printf("%d\t", *ip); printf("\n"); } p = a; for (i = 0; i < 2; p++, i++) printf("%d\t", *(*(p+i)+1)); printf("\n"); 程序运行后, 将输出

55 二维数组与一维数组指针图示 a p-1 a+0 a[0] a+1 a[1] int (*p)[4]=a+1 p+1 a+2 a[2] int a[3][4]; p[1] 或 *(p+1) 二维数组名和指向一维数组的指针及数组元素位置之间的关系

56 指针数组 当数组元素类型为某种指针类型时, 该数组就称为指针数组 指针数组的定义形式为 类型说明符 * 数组名 [ 常量表达式 ]; 常量表达式是一个整型的, 是数组的长度说明, 用于指明数组元素的个数 ; 类型说明符指明指针数组的元素指针指向的对象的类型 数组名之前的 * 是必需的, 由于它出现在数组名之前, 使该数组成为指针数组 例如, int *p[10]; 定义指针数组 p 的每个元素都能指向 int 型数据的指针变量, 有十个元素 :p[0] p[1] p[9] 和一般的数组定义一样, 数组名 p 也可作为 p[0] 的地址

57 指针数组 ( 续 ) 在指针数组的定义形式中, 由于 [] 比 * 的优先级高, 使数组名先与 [] 结合, 形成数组, 然后再与数组名之前的 * 结合, 表示数组元素是指针类型 注意, 在 * 与数组名之外不能加上圆括号, 否则变成指向数组的指针变量 如,int (*q)[10]; 是定义指向由 10 个 int 型元素组成的数组的指针 引入指针数组的主要目的是为了便于统一管理同类的指针 如利用指针数组能实现对一组独立的指针变量以数组的形式对它们作统一处理

58 指针数组 ( 续 ) 有以下定义 int a, b, c, d, e, f; int *apt[] = {&a, &b, &c, &d, &e, &f}; 下面循环语句能顺序访问独立变量 a b c d e f for(k = 0; k < 6; k++) printf( %d\t, *apt[k]); /* 其中 *apt[k] 可写成 **(apt+k) */ 下面的两个程序实现将一组独立的变量输入它们的值, 排序后输出 前一个程序排序时交换变量的值, 后一个程序排序时交换它们的指针

59 指针数组示例 -1 排序时交换变量值 #include <stdio.h> #define N sizeof ap/sizeof ap[0] int a, b, c, d, e, f; void main() { int *ap[] = {&a, &b, &c, &d, &e, &f}; int k, j, t; printf( Enter a, b, c, d, e, f.\n ); for(k = 0; k < N; k++) scanf( %d,ap[k]); /*scanf( %d,*(ap+k))*/ for(k = 1; k < N; k++) for(j = 0; j < N-k; j++) if (*ap[j] > *ap[j+1]) { t =*ap[j]; /* 交换变量的值 */ *ap[j] = *ap[j+1]; *ap[j+1] = t; } for(k = 0; k < N; k++) printf( %d\t, *ap[k]); printf( \n\n ); }

60 指针数组示例 -2 排序时不交换变量的值, 而是交换它们的指针 #include <stdio.h> #define N sizeof ap/sizeof ap[0] int a, b, c, d, e, f; void main() { int *ap[] = {&a, &b, &c, &d, &e, &f}; int k, j, *t; printf( Enter a, b, c, d, e, f.\n ); for(k = 0; k < N; k++) scanf( %d, ap[k]); for(k = 1; k < N; k++) for(j = 0; j < N-k; j++) if (*ap[j] > *ap[j+1]) { t = ap[j];/* 交换变量的指针 */ ap[j] = ap[j+1]; ap[j+1] = t; } for(k = 0; k < N; k++) printf( %d\t, *ap[k]); printf( \n\n ); }

61 指针数组示例 -3 从文件输入字符行, 对输入的字符行排序后输出到另一文件中 设文件字符行的行数不超过 500 行, 每行字符不超过 80 个字符 #include <stdio.h> #include <string.h> #define LINES 500 #define Nline 80 FILE *fp; char rfname[40], wfname[40]; char lines[lines][nline+1]; char *lptr[lines]; void main() { int n, i, j; char *t; printf(" 输入文件名?\n "); scanf(" %s%*c ", rfname); if ((fp = fopen(rfname, " r ")) == NULL) { printf(" 不能打开输入文件 %s\n ", rfname); return ; }

62 指针数组示例 -3( 续 ) 从文件输入字符行, 对输入字符行排序后输出到另一文件 ( 续 ) n = 0; while(n<lines && fgets(lines[n], Nline, fp)!= NULL) n++; /* fgets 从文件输入字符行, 存储到数组中 */ fclose(fp); /* 将输入的诸字符串的首字符指针置入指针数组 */ for(i = 0; i < n; i++) lptr[i] = *(lines + i); /* &lines[i][0] */ for(j = 1; j < n; j++) for(i = 0; i < n-j; i++) if (strcmp(lptr[i], lptr[i+1]) > 0) { t = lptr[i]; lptr[i] = lptr[i+1]; lptr[i+1] = t; } printf(" 输出文件名?\n "); scanf(" %s%*c ", wfname); fp = fopen(wfname, w ); for(i = 0; i < n; i++) fprintf(fp, " %s ", lptr[i]); fclose(fp); printf("\n\n\n"); for(i = 0; i < n; i++) printf("%s ", lptr[i]); printf("\n\n\n"); }

63 指针数组 ( 续 ) 当指针数组的元素分别指向二维数组各行首元素时, 也可用指针数组引用两维数组的元素 以下代码说明指针数组引用两维数组元素的方法 int a[10][20], i; int *b[10]; for(i = 0; i < 10; i++) b[i] = &a[i][0]; /* b[i] 指向数组元素 a[i][0] */ 则表达式 a[i][j] 与表达式 b[i][j] 引用同一个元素, 即从指针数组方向来看, 因 b[i] 指向元素 a[i][0],*(b[i]+j) 或 b[i][j] 引用元素 a[i][j]

64 指针数组 ( 续 ) 当指针数组的元素指向不同的一维数组的元素时, 也可通过指针数组, 把它们当作两维数组那样来引用 如以下代码所示 char w0[ ] = Sunday, w1[ ] = Monday, w2[ ] = Tuesday, w3[ ] = Wednesday, w4[ ] = Thursday, w5[ ] = Friday, w6[ ] = Saturday ; char *wname[] = {w0,w1, w2, w3, w4, w5, w6}; 则语句 for(i = 0; i <= 6; i++ ) printf( %s\n, wname[i]); 输出星期英文名称 wname[2][4] 引用字符 w2[4], 其值为 d

65 指针数组示例 以下例子程序把一维数组分割成不等长的段, 从指针数组方向来看, 把它当作两维数组来处理 #include <stdio.h> #define N 8 int p[n*(n+1)/2], i, j, *pt[n]; void main() { for(pt[0] = p, i = 1; i < N; i++) pt[i] = pt[i-1] + i; /* 确定指针关系 */ for(i = 0; i < N; i++) { } 程序产生如下形式的二项式的系数三角形 pt[i][0] = pt[i][i] = 1; /* 左右两边赋值 */ for(j = 1; j < i; j++) pt[i][j] = pt[i-1][j-1] + pt[i-1][j]; /* 确定中间值 */ } for(i = 0; i < N; i++) { /* 打印值 */ printf("%*c", 40-2*i, ); for(j = 0; j <= i; j++) printf("%4d", pt[i][j]); printf("\n"); }

66 二级指针 当指针变量 pp 所指变量 ip 是一种指针时,pp 是一种指向指针的指针, 称指针变量 pp 是一种 2 级指针 定义指向指针变量的指针变量的一般形式为类型说明符 ** 变量名 ; 首先定义变量为指针变量, 其次是该变量能指向一种指针对象, 最后是被指向的指针对象能指向的对象的类型 例如 : int **pp, *ip, i; ip = &i; pp = &ip; 定义说明 pp 是指向指针的指针变量 ; 它指向的是这样一种指针对象, 该指针对象是指向 int 型变量

67 二级指针 ( 续 ) 二级指针与指针数组有密切的关系 若有指针数组 char *lines[ ] = { ADA, ALGOL, C, C++, FORTRAN, PASCAL }; 则 lines 指针数组的每个元素分别指向以上字符串常量的首字符 在这里数组名 lines 可以作为它的首元素 lines[0] 的指针,lines+k 是指向元素 lines[k] 的指针 lines[k] 也是指针, 表达式 lines+k 的值是一种指针的指针 如有必要还可引入指针变量 cp, 让它指向数组 lines 的某元素, 如 cp = &lines[k] 这样,cp 就是指向指针型数据 的指针变量 在这里,cp 是指向字符指针的指针变量, 它应被定义成 char **cp;

68 二级指针 ( 续 ) 对于指向字符指针的指针变量的定义 char **cp; 为了定义这样的 cp, 它的前面有两个 * 号 由于 * 自右向左结合, 首先是 *cp 表示 cp 是指针变量, 再有 **cp 表示 cp 指向的是某种指针类型, 最后 char **cp 表示指针变量 cp 指向指向字符型数据的指针 针对前一个例子 : 如果有赋值 cp = &lines[1], 让它指向数组元素 lines[1], 则 *cp 的表示引用 lines[1], 它也是一个指针, 指向字符串 ALGOL 的首字符 如引用指针 *cp 所指内容,**cp 表示引用 lines[1][0], 其值是字符 A

69 二级指针示例 下面代码实现顺序输出指针数组 lines 各元素所指字符串 for(cp = lines; cp < lines+6; cp++) printf( %s\n, *cp); 下面代码是采用 %c 格式, 逐一输出字符串字符, 实现顺序输出指针数组 lines 各元素所指的字符串 for(i = 0; i < 6; i++) { /* 设 i 和 j 是 int 类型 */ for(j = 0; lines[i][j]!= \0 ; j++) printf( %c, lines[i][j]); printf( \n ); }

70 二级指针示例 ( 续 ) 设有数组 a[] 和指针数组 pt[] 有以下代码所示的关系 int a[ ] = { 2, 4, 6, 8, 10}; int *pt[ ] = { &a[3], &a[2], &a[4], &a[0], &a[1]}; int **p; 下面的代码利用指针数组 pt[] 和指针的指针 p, 遍历数组 a[] for(p = pt; p < pt + 5; p++) printf( %d\t, **p); 上例说明指针的指针与指针数组有密切关系, 指向指针数组元素的指针即为指针的指针, 如以上程序中的指针变量 p 上述代码首先让它指向指针数组的首元素, 然后循环让它顺序遍历指向指针数组的各元素, 标记 *p 能引用 p 所指的数组元素,**p 能引用 p 所指数组元素所指的变量 程序中用 **p 访问数组 a[] 的元素

71 本讲小结 指针 指针和数组 指向数组元素的指针 指向字符串的指针 指向数组的指针 指针数组 二级指针

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

第4章 栈和队列

第4章  栈和队列 第 7 讲 数组 字符串 指针及其应用 (Part II) 周水庚 2006 年 10 月 18 日 程序设计 -2006 年秋 1 提要 数组的基本概念 一维数组 多维数组 字符数组和字符串 指针和数组 程序设计 -2006 年秋 2 数组 定义形式 类型说明符数组名 [ 常量表达式 ]; 类型说明符数组名 [ 常量表达式 ][ 常量表达式 ]; 引用形式 数组名 [ 下标 ] 数组名 [ 下标

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

2015年计算机二级(C语言)模拟试题及答案(三)

2015年计算机二级(C语言)模拟试题及答案(三) 2016 年计算机二级 (C 语言 ) 模拟试题及答案 (3) 1.( A ) 是构成 C 语言程序的基本单位 A 函数 B 过程 C 子程序 D 子例程 2.C 语言程序从 ( C ) 开始执行 A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的 main 函数 D 包含文件中的第一个函数 3 以下说法中正确的是( C ) A C 语言程序总是从第一个定义的函数开始执行 B 在 C 语言程序中,

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Microsoft PowerPoint - C语言课件-9-结构体.pptx

Microsoft PowerPoint - C语言课件-9-结构体.pptx 第九章结构体 郎大鹏 第九章结构体 9.1 结构体类型的声明方法 9.2 结构体类型变量的定义与使用 9.3 结构体数组 9.4 编程举例 9.5 习题 9.1 结构体类型的声明方法 结构体声明的语法形式如下 : struct 结构体标识符 成员变量列表 ; }; 例如, 为了描述班级 ( 假设仅仅包括班级编号 专业 人数等信息 ), 可以声明如下的结构体类型 struct Class char Code[10];

More information

untitled

untitled CHAPTER 02 2 CHAPTER 2-1 2-4 2-2 2-5 2-3 2-6 2-1 2-1-1 2-2 02 int A[3] = {10, 20, 30; A[0] 10 A[1] 20 A[2] 30 int *pa[3], A[3]; C 3 pa pa[0]pa[1]pa[2] 3 A A[0]A[1]A[2] 3 A A[0] A + i A[i] A + i &A[i]*(A

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc C 语言开发入门 课程教学大纲 ( 课程英文名称 ) 课程编号 :201409210011 学分 :5 学分学时 :60 学时 ( 其中 : 讲课学时 :37 学时上机学时 :23 学时 ) 先修课程 : 计算机导论后续课程 :C++ 程序设计适用专业 : 信息及其计算机相关专业开课部门 : 计算机系 一 课程的性质与目标 C 语言开发入门 是计算机各专业必修的基础课程, 是数据结构 C++ Java

More information

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu 移动平台应用软件开发 C/C++/JAVA 基础 指针以及指针操作 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0;

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 12 章再谈指针 本章的基本内容是 : 指针与数组 指针与结构体 动态存储分配 由于指针可以直接对内存进行操作, 所以指针的功能非常 强大 正确灵活地使用指针可以有效地表示复杂的数据结 构, 并可动态分配内存空间, 提高程序的运行效率 任务 12.1 判断回文 问题 输入一个字符串, 判断该字符串是否为回文 ( 首尾对称的字句, 例如 abcba abba 均为回文 ) 要求用指针实现 想法 设两个指针变量

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

プログラムの設計と実現II

プログラムの設計と実現II UNIX C ls mkdir man http://www.tj.chiba-u.jp/lecture/prog2/ Ctrl+x, Ctrl+s ( )..[4]% gcc Wall o hoge hoge.c..[5]%./hoge 1 : 1 2 : 2 3 : 3 4 : 0 6..[6]% (! )..[4]% gcc Wall o hoge hoge.c..[5]%!g gcc Wall

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 选择题 1. 以下数组定义中, 错误的是 :C)int a[3]=1,2,3,4; 2. 以下数组定义中, 正确的是 :B) int a[][2]=1,2,3,4; 3. 设有定义 int a[8][10];,

More information

2015年计算机二级(C语言)模拟试题及答案(四)

2015年计算机二级(C语言)模拟试题及答案(四) 2015 年计算机二级 (C 语言 ) 模拟试题及答案 (4) 一 填空题 1 C 语言中基本的数据类型有 : 2 C 语言中普通整型变量的类型说明符为, 在内存中占 字节, 有符号普通整型的数据范围是 3 整数-35 在机内的补码表示为 4 执行下列语句 int a=8;a+=a-=a*a; 后,a 的值是 5 有如下语句:charA[ ]={ I am a student }; 该字符串的长度是,A[3]=

More information

文件

文件 CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111

More information

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

More information

Microsoft PowerPoint - plan06.ppt

Microsoft PowerPoint - plan06.ppt 程 序 设 计 语 言 原 理 Principle of Programming Languages 裘 宗 燕 北 京 大 学 数 学 学 院 2012.2~2012.6 6. 基 本 控 制 抽 象 子 程 序 抽 象 子 程 序 活 动 和 局 部 环 境 静 态 实 现 模 型 一 般 实 现 模 型 调 用 序 列 和 在 线 展 开 参 数 机 制 泛 型 子 程 序 异 常 处 理 其

More information

第5章 递归 (Recurve)

第5章  递归 (Recurve) 第 11 讲指针与引用 (Part II) 周水庚 2016-11-24 提要 指针形参 数组形参 字符指针形参 函数形参 返回指针值的函数 程序设计 -2016 年秋 2 提要 指针形参 数组形参 字符指针形参 函数形参 返回指针值的函数 程序设计 -2016 年秋 3 函数形参 函数设置形参的目的是让函数被调用时, 能从调用处获得数据或指针信息 C 语言关于函数形参遵守以下规定 函数调用时, 形参从实参获得初值

More information

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期  开放本科  期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默 试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,

More information

C/C++ - 数组与指针

C/C++ - 数组与指针 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 float candy [ 365]; char code [12]; int states [50]; 2 int array [6] = {1, 2, 4, 6, 8, 10}; 3 // day_mon1.c: # include # define MONTHS 12 int

More information

期中考试试题讲解

期中考试试题讲解 一 选择题 ( 一 ) 1. 结构化程序设计所规定的三种基本结构是 C A 主程序 子程序 函数 B 树形 网形 环形 C 顺序 选择 循环 D 输入 处理 输出 2. 下列关于 C 语言的叙述错误的是 A A 对大小写不敏感 B 不同类型的变量可以在一个表达式中 C main 函数可以写在程序文件的任何位置 D 同一个运算符号在不同的场合可以有不同的含义 3. 以下合法的实型常数是 C A.E4

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

C/C++ - 字符串与字符串函数

C/C++ - 字符串与字符串函数 C/C++ Table of contents 1. 2. 3. 4. 1 char C 2 char greeting [50] = " How " " are " " you?"; char greeting [50] = " How are you?"; 3 printf ("\" Ready, go!\" exclaimed John."); " Ready, go!" exclaimed

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

C

C C 14 2017 5 31 1. 2. 3. 4. 5. 2/101 C 1. ( ) 4/101 C C ASCII ASCII ASCII 5/101 C 10000 00100111 00010000 ASCII 10000 31H 30H 30H 30H 30H 1 0 0 0 0 0 ASCII 6/101 C 7/101 C ( ) ( ) 8/101 C UNIX ANSI C 9/101

More information

untitled

untitled 1 DBF (READDBF.C)... 1 2 (filetest.c)...2 3 (mousetes.c)...3 4 (painttes.c)...5 5 (dirtest.c)...9 6 (list.c)...9 1 dbf (readdbf.c) /* dbf */ #include int rf,k,reclen,addr,*p1; long brec,erec,i,j,recnum,*p2;

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

Microsoft PowerPoint - ds-1.ppt [兼容模式]

Microsoft PowerPoint - ds-1.ppt [兼容模式] http://jwc..edu.cn/jxgl/ HomePage/Default.asp 2 说 明 总 学 时 : 72( 学 时 )= 56( 课 时 )+ 16( 实 验 ) 行 课 时 间 : 第 1 ~14 周 周 学 时 : 平 均 每 周 4 学 时 上 机 安 排 待 定 考 试 时 间 : 课 程 束 第 8 11 12 章 的 内 容 为 自 学 内 容 ; 目 录 中 标 有

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information

Microsoft PowerPoint - 07 派生数据类型

Microsoft PowerPoint - 07 派生数据类型 能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,

More information

C++ 程式設計

C++ 程式設計 C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义

More information

C/C++ System Program Documentation

C/C++ System Program Documentation C/C++ System Program Documentation 发布 1.0.0 HappyAnony 2018 年 06 月 22 日 Contents 1 目录 1 1.1 概述简介............................................... 1 1.2 语法基础...............................................

More information

C 语言 第十讲 数组 张晓平 武汉大学数学与统计学院 2019 年 2 月 25 日

C 语言 第十讲 数组 张晓平 武汉大学数学与统计学院 2019 年 2 月 25 日 C 语言 第十讲 数组 张晓平 武汉大学数学与统计学院 2019 年 2 月 25 日 1. 数组 2. 多维数组 3. 指针与数组 4. 函数 数组与指针 5. 指针操作 6. 保护数组内容 7. 指针与多维数组 2/167 C 语言 8. 变长数组 9. 关键概念 3/167 C 语言 1. 数组 数组 数组由一系列类型相同的元素构成 数组声明必须包括元素的个数与类型 float candy[365];

More information

Monthly Report 2010_12

Monthly Report 2010_12 年月日 程序设计 -2011 年秋 1 数组的基本概念 一维数组 多维数组 字符数组与字符串 程序设计 -2011 年秋 2 定义形式 类型说明符数组名 [ 常量表达式 ]; 类型说明符数组名 [ 常量表达式 ][ 常量表达式 ]; 引用形式 数组名 [ 下标 ] 数组名 [ 下标 ][ 下标 ] 程序设计 -2011 年秋 3 数组的基本概念 一维数组 多维数组 字符数组与字符串 程序设计 -2011

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf (%d, & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

技能竞赛C试题

技能竞赛C试题 C 语言程序设计单元测验四 ( 数组 ) 一 单项选择题 ( 每题 1 分, 共 60 分 ) 1 若有以下说明语句 : int a[12]={1,2,3,4,5,6,7,8,9,10,11,12; char c= a,d,g; 则数值为 4 的表达式是 :( ) A a[g-c] B a[4] C a[ d - c ] D a[ d -c] 2 假设 int 型变量占两个字节的存储单元, 若有定义

More information

关于编写硕士研究生入学考试自命题初试科目

关于编写硕士研究生入学考试自命题初试科目 华北水利水电大学 2019 年硕士研究生入学考试初试科目考试大纲 农业综合知识三 ( 科目代码 :341) 考试大纲 考试形式和试卷结构一 试卷分值及考试时间考试时间 180 分钟 (3 个小时 ), 满分 150 分二 考试基本要求本考试大纲适用于报考华北水利水电大学农业工程与信息技术专业硕士研究生入学考试, 该科目包括 : 数据库 c 语言程序设计 计算机网络三部分内容 三 试卷内容及结构数据库部分占

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

技能竞赛C试题

技能竞赛C试题 C 语言程序设计单元测验六 ( 指针 ) 一 单项选择题 ( 每题 1 分, 共 54 分 ) 1 有以下程序 void fun(char *a, char *b) { a=b; (*a)++; { char c1='a',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf("%c%c\n",c1,c2); A Ab B aa C Aa D Bb 2

More information

c语言面试题总结.doc

c语言面试题总结.doc 参考 : C/C++ 程序员面试指南 杨国祥等编著电子工业出版社 编程规范 1 头文件内有时会定义一些类, 结构体等, 如果被包含多次, 将会出现类型重定义的错误, 所以通常使用预处理指令来解决这个问题 #ifndef 标识 #define 标识. #endif 标识在理论上是可以自由命名的, 但每个头文件的这个标识都应该是唯一的, 标识的命名的规则一般是头文件名全大写, 前后加下划线, 并把头文件中的.

More information

C

C C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;

More information

epub 33-8

epub 33-8 8 1) 2) 3) A S C I I 4 C I / O I / 8.1 8.1.1 1. ANSI C F I L E s t d i o. h typedef struct i n t _ f d ; i n t _ c l e f t ; i n t _ m o d e ; c h a r *_ n e x t ; char *_buff; /* /* /* /* /* 1 5 4 C FILE

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

没有幻灯片标题

没有幻灯片标题 第 2 章 C 语言的基本数据类型与表达 式 2. 1 C 语言的语法基础 2. 2 C 语言的基本数据类型 2. 3 常量和变量 2. 4 运算符与表达式 2. 5 数据类型转换 用 第 2 章 C 语言的基本数据类型与表达 2.1 C 语言的语法基础 2. 1. 1 C 语言字符集 式 C 语言的基本符号可分 4 个类, 归纳如下 : (1) 英文字母 : 大小写各 26 个, 共计 52 个

More information

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos( 第一章三角函数 1. 三角函数的诱导公式 A 组 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C ( 中诱导公式 ) B. cos( B C) cos A D. sin( B C) sin A sin60 cos( ) sin( 0 )cos( 70 ) 的值等于

More information

C C

C C C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

格式化字符串 Weifeng Sun School of Software, DLUT

格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串漏洞 格式化字符串, 也是一种比较常见的漏洞类型 会触发该漏洞的函数很有限 主要就是 printf 还有 sprintf,fprintf 等等 c 库中 print 家族的函数 >int printf(const char* format,...) 2 / 42 3 / 42 A B 字符串指针 char

More information

Ps22Pdf

Ps22Pdf ( 98 ) C ( ) ( )158 1998 C : C C C,,, C,, : C ( ) : : (, 100084) : : : 7871092 1/ 16 :18 25 :415 : 2000 3 1 2000 3 1 : ISBN 7 302 01166 4/ T P432 : 00016000 : 22 00 ( 98 ) 20 90,,, ;,,, 1994, 1998, 160,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

2015年计算机二级(C语言)模拟试题及答案(四)

2015年计算机二级(C语言)模拟试题及答案(四) 2016 年 计 算 机 二 级 (C 语 言 ) 模 拟 试 题 及 答 案 (4) 一 填 空 题 1 C 语 言 中 基 本 的 数 据 类 型 有 : 2 C 语 言 中 普 通 整 型 变 量 的 类 型 说 明 符 为, 在 内 存 中 占 字 节, 有 符 号 普 通 整 型 的 数 据 范 围 是 3 整 数 -35 在 机 内 的 补 码 表 示 为 4 执 行 下 列 语 句 int

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

要 求 服 装 统 一 各 队 自 带 比 赛 球 槌 队 长 及 教 练 标 志 大 会 提 供 比 赛 用 球 和 号 码 布 ( 五 ) 比 赛 所 用 球 槌 须 为 中 国 门 球 协 会 2016 年 度 专 业 器 材 供 应 商 企 业 的 产 品, 企 业 名 称 和 品 牌 请

要 求 服 装 统 一 各 队 自 带 比 赛 球 槌 队 长 及 教 练 标 志 大 会 提 供 比 赛 用 球 和 号 码 布 ( 五 ) 比 赛 所 用 球 槌 须 为 中 国 门 球 协 会 2016 年 度 专 业 器 材 供 应 商 企 业 的 产 品, 企 业 名 称 和 品 牌 请 竞 赛 规 程 一 比 赛 时 间 和 地 点 时 间 :2016 年 8 月 7 日 至 13 日 地 点 : 湖 北 省 利 川 市 二 竞 赛 织 指 导 单 位 : 中 国 门 球 协 会 主 办 单 位 : 中 国 门 球 协 会 门 球 之 苑 编 辑 部 利 川 市 人 民 政 府 承 办 单 位 : 湖 北 省 门 球 协 会 恩 施 州 老 年 人 体 育 协 会 利 川 市 文

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 内存操作 指针 常见考点 一级指针的用法和一级指针移动时的步长计算 两个指针之间的运算和地址越界问题 常量指针的相关问题 野指针导致程序执行错误的问题 多级指针的用法和多级指针移动时的步长计算 void * 和 void ** 的含义 3.1 指针基础 3.1.1 要点归纳 1. 指针变量 变量用于存放数据, 指针变量也是如此, 只不过指针变量存放的不是普通数据而是其他变量的地址 在 C

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年

移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 移动平台应用软件开发 课程建设小组北京大学二零一五年 移动平台应用软件开发 C/C++/JAVA 基础 C 中的预处理指令 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年 预处理 2 预处理器 C 语言的编译系统分为编译预处理和正式编译 预处理作用 : 对源程序编译之前做一些处理, 生成扩展 C 源程序 预处理器的行为是由预处理指令控制的 宏定义 文件包含 条件编译 #define #ifdef

More information

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63>

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63> 目录 I 考查目标... 2 II 考试形式和试卷结构... 2 III 考查内容... 2 IV. 题型示例及参考答案... 7 1 全国硕士研究生入学统一考试程序设计考试大纲 I 考查目标 全国硕士研究生入学统一考试计算机技术 软件工程专业学位硕士 程序设计 考试是为江苏大学招收以上硕士生设置的具有选拔性质的考试科目 其目的是科学 公平 有效地测试考生是否具备攻读计算机技术 软件工程专业学位硕士所必须的基本素质

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

状 态, 使 人 类 社 会 难 以 正 确 认 识 评 级 这 一 信 用 经 济 的 内 在 规 律, 难 以 真 正 总 结 西 方 错 误 评 级 的 教 训, 难 以 让 评 级 有 效 服 务 于 人 类 信 用 经 济 实 践 如 果 我 们 还 不 能 在 信 用 评 级 思 想 领

状 态, 使 人 类 社 会 难 以 正 确 认 识 评 级 这 一 信 用 经 济 的 内 在 规 律, 难 以 真 正 总 结 西 方 错 误 评 级 的 教 训, 难 以 让 评 级 有 效 服 务 于 人 类 信 用 经 济 实 践 如 果 我 们 还 不 能 在 信 用 评 级 思 想 领 世 界 需 要 评 级 新 思 想 关 建 中 2015 年 5 月 26 日 2008 年 爆 发 于 美 国 的 全 球 信 用 危 机 证 明 : 信 用 评 级 关 系 人 类 社 会 安 全 发 展, 西 方 错 误 评 级 是 危 机 的 制 造 者, 它 不 能 承 担 世 界 评 级 责 任 于 是, 改 革 国 际 评 级 体 系 成 为 时 代 的 主 流 思 潮 和 向 人 类

More information

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2 第 六 讲 指 针 与 字 符 串 1 内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2 指 针 什 么 是 指 针 指 针 的 定 义 与 运 算 指 针 与 一 维 数 组 指 针 数 组 行 指 针 与 二 维 数 组 指 针 与 引 用 指 针 与 函 数 3 指 针 定 义 什 么 是 指 针 指 针 变 量, 简 称 指 针, 用 来 存 放

More information

Microsoft Word - 综合试题2.doc

Microsoft Word - 综合试题2.doc 综合测试题二 一 选择题 ( 本大题共 10 小题, 每小题 1 分, 共 10 分 ) 1. C 语言中用于结构化程序设计的三种基本结构是 A. 顺序结构 选择结构 循环结构 B. if switch break C. for while do-while D. if for continue 2. 下列关于 C 语言用户标识符的叙述中正确的是 A. 用户标识符中可以出现下划线和中划线 B. 用户标识符中不可以出现中划线,

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc 2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

Microsoft PowerPoint - 20-string-s.pptx

Microsoft PowerPoint - 20-string-s.pptx String 1 String/ 1.: char s1[10]; char *s2; char s3[] = "Chan Tai Man"; char s4[20] = "Chan Siu Ming"; char s5[]={'h','e','l','l','o','\0'; 0 1 2 3 4 5 6 7 8 9 10 11 12 s3 C h a n T a i \0 M a n \0 printf

More information

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数

More information

从问题到程序——指针

从问题到程序——指针 指针 2011-5-18 地址与指针 3 内存地址 : 内存单元的编号 程序执行期间数据存放在内存区 : 有确定的存储位置, 且占据一定的内存单元 ; 机器语言通过地址访问数据, 高级语言将变量等作为存储单元 / 地址的抽象 ; 建立变量是分配存储单元, 赋值是将值存入单元, 取值是从单元中提取值 ; 任何变量在存在期间均有确定的存储位置, 有固定的地址 ( 寄存器变量除外 ); 内存的地址用固定长度的二进制编码,

More information

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 计算概论 A 课程程序设计部分 C++ 语言基本成分 数据成分 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 再谈, 我们的进度安排 我们的学习过程 感性理性函数指针等 数据成分运算成分控制成分数组字符串 结构化的程序递归 传统学习过程 数据类型与表达式 输入输出 关系运算 控制语句 函数数组指针结构体 作业练习 感性认识作业练习 ( 以抄程序为主 ) 正常作业练习

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

第3章.doc

第3章.doc 3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo

More information

<4D F736F F D20D7DBBACFCAD4CCE231B2CEBFBCB4F0B0B82E646F63>

<4D F736F F D20D7DBBACFCAD4CCE231B2CEBFBCB4F0B0B82E646F63> 综合测试题一参考答案 一 填空题 ( 表达式求值 )( 本大题共 10 小题, 每小题 1 分, 共 10 分 ) 设各语句的初始化 相同 :int x=3,y=2,z=1; 1. x=y==z x= 0 2. x=!(z>y)&&!x 1 x= 1 3. x=(y++*1/3) x= 0 4. x=((x>y>z)?1:0) x= 0 5. x*=2+3 x= 15 6. x=(++z*y,y++,z%y)

More information

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf(%d, &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf(% 2013 ( 28 ) ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 10 B 1 C 1 D 5 E 5 F 1 G II 5 H 30 1 2013 C 1 #include 2 int main(void) 3

More information

Microsoft Word - chap13.doc

Microsoft Word - chap13.doc ï FILE dã Ä o rô qî ô Ö ƒù å o ô ÃÓ FILE Ã Ù Ö o v-> ª w ï FILE d wã +1 ~ c:\temp w Õx test.dat Ã Û vä à n ïw à test.dat 13-2a /* File name: ex13-2a.c */ #include char ch; fptr = fopen("c:\\temp\\test.dat",

More information

第3章 Java语言基础

第3章 Java语言基础 第 3 章 Java 语言基础 第 1/55 页 习题 3 3. 8. 9. 13. 18. 实验 : 1. 实验 4( 实 P11~12) 2. 实验任务 : 1 例 3.1( 教 P30) 2 变量赋值 ( 教 P29) 3 编写两个缓冲区对应同一个输入流对象, 并键盘输入整型 a 和双精度 b, 求和 第 2/55 页 习题 3 3. 实验任务 : 1 实验 5( 实 P12~13) 2 实验

More information

悖论

悖论 年 月总第 8 期 数学方法与数学思想 编辑点评 数学与哲学都是研究最普遍的事物的 但是研究的角度 目的 方法 过 程和成果并不一样 所以两者之间有联系也有区别 该文通过对像 先有鸡 还是先有蛋 这样一些通俗又典型的例子 说明数学家与哲学家对于同一 个问题思维和处理的方式如何不同 便于读者形象地理解文中的论点 文 章的论述比较恰当 准确 深刻 写作也通顺流利 是一篇可读性较强的 文章 值得读者体会和学习

More information