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

Size: px
Start display at page:

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

Transcription

1 移动平台应用软件开发 C/C++/JAVA 基础 指针以及指针操作 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组北京大学二零一五年

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

3 变量的存储 内存 : 变量的存储位置 不同类型的变量, 存储在不同内存区域 ; 内存类型 内存分为静态内存和动态内存, 动态内存又可以分为堆内存和栈内存 内存分配 方式相应的分为静态存储区域分配 栈创建 堆分配 静态存储区域分配 程序在编译的时候就已经分配好, 这块内存在程序的整个运 行期间都存在 栈创建 函数执 行的时候, 函数内的局部变量 ( 包括函数参数 ) 的存储单元都是在栈上创建的, 函数执 行后占用栈的存储单元会自动被释放 这种分配效率很 高, 但是分配的内存容量有限 占用栈内存多了, 会出现栈溢出 ; 堆分配 也称动态存储分配, 是指程序在运 行时候用 malloc 申请的内存, 程序员自 己负责在何时用 free 释放内存 3

4 内存区通常分为 4 个区域 : 栈区 存放程序的局部变量 静态区 存放程序的全局数据和静态数据 数据区 堆区 存放程序动态申请的数据 代码区 存放程序的代码 memory 代码区 4

5 二 指针概念 指针变量是一种数据类型, 内容存放的是另外一个变量的内存地址 int a = 2; int *p = &a; int *q = p; q 0x x p 0x x a 2? 0x ? 0x c? 0x x

6 指针声明和赋值操作 int *p; // 声明指向 int 型的指针变量 p p 表 示变量名是 p * 表 示这个变量是指针类型 int 表 示指向的内容是整形 p = &a; // 把指针 p 指向 a 把变量 a 的地址赋给指针 p, 即把指针 p 指向 a 6

7 指针声明和赋值操作 int s = 0, a = 3, b = 10; int *p; // 声明指向 int 型的指针 p = &a; // 把指针 p 指向 a int *q = p; // 两个指针指向内容类型一致时才能赋值 s a b p q &a??? 7

8 例 : 查看指针变量值 1 #include <stdio.h> 2 int main(void) 3 { 4 int a=2; 5 int *p=&a; 6 int *q=p; 7 printf("&a=%p\n",&a); 8 printf(" p=%p\n",p); 9 printf(" q=%p\n",q); 10 printf("&p=%p\n",&p); 11 printf("&q=%p\n",&q); 12 printf( a=%d\n",a); 13 return 0; 14 } 8

9 例 : 通过指针变量访问整型变量 1 #include<stdio.h> 2 int main(void) 3 { 4 int a,b; 5 int *pointer_1,*pointer_2; 6 a=100;b=10; 7 pointer_1=&a; 8 pointer_2=&b; 9 printf("%d,%d\n",a,b); 10 printf("%d,%d\n",*pointer_1,*pointer_2); 11 return 0; 12 } 13 运行结果 ; 100,10 100,10

10 访问指针指向的变量内容 (*p) ++; // 等价于 a++, 能不能去掉括号? s a b p q &a &a *p = 6; // 等价于 a=6 s a b p q &a &a 10

11 使用指针注意事项 int *p1, *p2; 与 int *p1, p2; 指针变量名是 p1,p2, 不是 *p1,*p2 指针变量只能指向定义时所规定类型的变量 指针变量定义后, 变量值不确定, 应 用前必须先赋值 11

12 思考题 思考 : 下面代码的含义和对内存的修改 char c1 = A, c2 = B, tmp; char *p = &c1, *q = &c2; tmp = *p; *p = *q; *q = tmp; // c1 和 c2 的值变成了什么? // tmp 值呢? 12

13 指针类型的函数参数和返回值 1 #include <stdio.h> 2 void inc(int ai) 3 { 4 printf("ai=%d\n",ai); 5 ai++; 6 printf("ai=%d\n",ai); 7 } 8 9 int main(void) 10 { 11 int a=0; 12 printf("a=%d\n",a); 13 inc(a); 14 printf("a=%d\n",a); 15 return 0; 左边的代码能把 a 值进行加 1 操作吗? 为什么? 函数传值调用时,a 值会被复制一份, 副本被传入函数内部,a 值本身并没有修改 使用传址调用, 把 a 的地址传进函数内部, 可以修改 a 值

14 指针类型的函数参数和返回值 1 #include <stdio.h> 2 void inc(int ai) 3 { 4 printf("ai=%d\n",ai); 5 ai++; 6 printf("ai=%d\n",ai); 7 } 8 9 int main(void) 10 { 11 int a=0; 12 printf("a=%d\n",a); 13 inc(a); 14 printf("a=%d\n",a); 15 return 0; 1 #include <stdio.h> 2 void inc(int *ai) 3 { 4 printf("*ai=%d\n",*ai); 5 (*ai)++; 6 printf("*ai=%d\n",*ai); 7 } 8 9 int main(void) 10 { 11 int a=0; 12 printf("a=%d\n",a); 13 inc(&a); 14 printf("a=%d\n",a); 15 return 0;

15 指针类型的函数参数和返回值 指针参数可以把变量的地址传给函数, 从而在被调用函数里面修改调用者内部的变量 右边的代码用于交换主函数里面的 i 和 j 变量的值, 但交换过程是在子函数 swap() 中进行的 返回了交换后的 px 指针, 即原来第二个变量的地址 1 #include <stdio.h> 2 int *swap(int *px,int* py) 3 { 4 int temp; 5 temp=*px; 6 *px=*py; 7 *py=temp; 8 return px; 9 } 10 int main(void) 11 { 12 int i=10, j=20; 13 int *p=swap(&i,&j); 14 printf("now i=%d,j=%d,*p=%d \n",i,j,*p); 15 return 0;

16 指针类型的函数参数和返回值 常见错误 : 返回函数局部变量的地址 int *getnum(){ int a = 3; return &a; } // 出此函数后 a 已被释放 变量 a 在函数 getnum() 内部定义, 生命周期只在函数的执行时期内 函数退出后变量 a 消亡, 成为非法的内存空间, 值可能被别的函数修改, 再次访问 a 得到的值不可预测 int *swap(int *px, int *py) 返回的 px 是从外部传进来的, 不是在函数内部定义的,swap() 退出后仍然存在

17 三 指针的基本操作 修改指针本身 p ++; s a b p q &a &b &a 指针运算 p++ 相当于 : 地址 += sizeof( 指向的变量类型 ) q --; s a b p q &b &a &s 17

18 运算符 * 和 & 的优先级 单目运算符 : ++ --! * &, 优先级仅次于括号, 并从右到左结合 *p ++ // ++ 优先, 与 p 结合 (*p) ++ // 括号优先级高于 ++, 先行运算 ++ *p // *p 先运算 if( *p!= 5 ) // 单目运算符优先级高于!= b = *p + 10 // + 是加法运算符, 优先级低于 * b = *(p + 10) // 先运算括号里面加法 18

19 零指针与空类型指针 零指针 :( 空指针 ) 定义 : 指针变量值为零 表示 : int * p=0; #define NULL 0 int *p=null: p=null 与未对 p 赋值不同 用途 : 避免指针变量的非法引用 在程序中常作为状态比较 p 指向地址为 0 的单元, 表 示指针变量值没有意义 void * 类型指针 表示 : void *p; void* 类型指针与其他类型指针可以隐式转换 19

20 四 指针与数组 指向数组元素的指针变量定义 int a[10]; int *p; 2000a[0] 2004a[1] 2008a[2] 200ca[3] 赋值 p=&a [0]; 等价于 p=a; 也可, 在定义指针变量时赋初值 int *p=a; 2010a[9] 数组名是表 示数组 首地址的地址常量 p=a 的作 用是把数组的 首地址赋给指针变量 P, 20 而不是把数组 a 的各元素赋给 p... 整型指针 p 2000 p

21 数组元素表示方法 地址 元素 地址 元素 a a+1 a+2 a+9 a[0] a[1] a[2] a[3]... a[9] a[0] a[1] a[2] a[9] *a *(a+1) *(a+2) *(a +9) p p+1 p+2 p+9 a[0] a[1] a[2] a[3]... a[9] *p *(p+1) *(p+2) *(p +9) p[0] p[1] p[2] p[9] 下标法 指针法 21

22 首址 偏移量 运算 下标法 a i a[ i ] 计算法 a i *(a+i) 指针法 p 已用 p++ 移 到当前位置 *p 无论是下标法 (a[ i ]) 还是计算法 (*(a+i)) 还是指针法 (* (p +i) ), 尽管表现形式不同, 可本质都是 : *( 首址 + 偏移量 ) 22

23 例输出数组中的全部元素 (3 种方法 ) (1) 下标法 (2) 数组名计算数组元素的地址 void main() { int a[10] int i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("%d",a[i]); } void main() { int a[10] int i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("%d",*(a+i)); }

24 (3) 指针变量法 void main() { int a[10]; int *p,i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(p=a;p<(a+10);p++) printf("%d",*p); } 指针变量的运算 p++, 使 p 指向下一元素 a[1]; *p++,++ 和 * 同优先级, 自右至左, 等价于 *(p++) *(p++) 和 *( ++ p) 作用不同 前者, 先取 *p 值, 再使 p+1 后者先使 p+1, 再取 *p ++ 和 -- 运算符可以使指针变量向前或向后移动 若 p1 与 p2 指向同一数组,p1-p2= 两指针间元素个数 (p1-p2)/d

25 例注意指针变量的运算 例 void main() { int a []={5,8,7,6,2,7,3}; int y,*p=&a[1]; y=(*--p)++; printf("%d",y); printf("%d",a[0]); } a p 输出 :5 6

26 数组名作函数参数 main() {int array[10]; f(array,10); } array 实参数组名, 代表该数组首元素的地址 f(int arr[],int n ) { } arr 形参数组名, 用来接收从实参传递过来的数组首元素的地址, 实际上, 形参数组名是按指针变量处理的 26

27 1 #include <stdio.h> 2 void init(int a[],int len) 3 { 4 while(len>0){ 5 *a++=len--; 6 } 7 } 8 int main(void) 9 { 10 int a[10]; 11 init(a,10); 12 int i=0; 13 for(i=0;i<10;i++) 14 printf("%d ",a[i]); 15 printf("\n"); 16 return 0; 17 } 输出 : init 函数形参 int a[], a++ 为什么可以? 27

28 五 指针与 const 限定符 const int *a; int const *a; int * const a; int const * const a; a 是一个指向 const int 类型的指针,a 所指向的内存单元的内容不可改写 a 是一个指向 int 类型的 const 指针,a 不可改写, a 所指向的内存单元可改写 a 是一个指向 const int 类型的 const 指针,a 不可改写, a 所指向的内存单元内容不可改写 指向 非 const 变量的指针或者 非 const 变量的地址可以传给指向 const 变量的指针, 编译器可以做隐式类型转换 指向 const 变量的指针或者 const 变量的地址不可以传给指向 非 const 变量的指针 即使不 用 const 限定符也能写出功能正确的程序, 但良好的编程习惯应该尽可能多地使 用 const 28

29 int main(void) { char *p = "abcd";... *p = 'A';... } int main(void) { char const *p = "abcd";... *p = 'A';... } 编译时不出错, 运行时出错 编译时出错 29

30 1 void add(int *a, const int *b) 2 { 3 *a += *b; 4 //*b=8; 5 } 6 int main(void) 7 { 8 int a=1,b=3; 9 add(&a,&b); 10 return 0; 11 } 指针 b 指向的内容不可修改,*b=8 会引起编译错误 30

31 六 指向指针的指针与指针数组 指针可以指向基本类型, 也可以指向复合类型, 因此也可以指向另外一个指针变量, 称为指向指针的指针 ( int 二级 i; 指针 ) int *pi = &i; int **ppi = π n 数组中的每个元素可以是基本类型, 也可以复合类型, 因此也可以是指针类型, 称为指针数组 int *a[10]; int *a[10]; int **pa = &a[0]; 31

32 main 函数的标准原型应该是 int main(int argc, char *argv[]); argc 是命令行参数的个数 argv 是一个指向指针的指针, 为什么不是指针数组呢? #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i = 0; i < argc; i++) printf("argv[%d]=%s\n", i, argv[i]); return 0; } $ gcc main.c $./a.out a b c argv[0]=./a.out argv[1]=a argv[2]=b argv[3]=c 32

33 七 数组指针 定义一个指向数组的指针, 该数组有 10 个 int 元素 : int (*a)[10]; n 和指针数组的定义 int *a[10]; 相比, 仅仅多了一个 () 括号 n 如何记住和区分这两种定义呢? q [] 比 * 有更高的优先级 q 如果 a 先和 * 结合则表示 a 是一个指针 q 如果 a 先和 [] 结合则表示 a 是一个数组 33

34 八 函数指针 在 C 语言中, 函数也是一种类型, 可以定义指向函数的指针 指针变量的内存单元存放一个地址值, 而函数指针存放的就是函数的入口地址 ( 位于.text 段 ) void say_hello(const char *str) { printf("hello %s\n", str); } int main(void) { void (*f)(const char *); f = say_hello; (*f)("guys"); return 0; } 34

35 void (*f)(const char *) f 首先跟 * 号结合在一起, 因此是一个指针 (*f) 外面是一个函数原型的格式, 参数是 const char *, 返回值是 void, 所以 f 是指向这种函数的指针 而 say_hello 的参数是 const char *, 返回值是 void, 正好是这种函数, 因此 f 可以指向 say_hello 注意 :say_hello 是一种函数类型, 做右值使用时自动转换成函数指针类型, 所以可以直接赋给 f 也可以写成 f= &say_hello;, 35

36 指针函数与函数指针数组 指针函数在调用后返回一个指针, 通过指针中存储的地址值主调函数就能访问该地址中存放的数据, 并通过指针算术运算访问这个地址的前 后内存中的值 数据类型 * 函数名 ( 参数表 ) Ø 数据类型是函数返回的指针所指向数据的类型 Ø * 函数名声明了 一个指针型的函数 Ø 参数表是函数的形参列表 int *fun(int a,int b); 36

37 函数指针数组 数据类型 (* 函数指针名 [ 常量表达式 ])( 参数表 ); 与定义 一般变量指针数组 一样,C 语 言中也可以定义具有特定返回类型和特定参数类型的函数指针数组 int (*p[5])(int,int); 上述语句定义了 一个含有 5 个元素的函数指针数组, 其中的每个元素都是 一个指向函数的指针, 且指向的函数都是返回值类型为整型 带两个整型参数的函数 37

38 总结 *p++ 与 (*p)++ void * 的使用 const 与指针结合的用法 指针数组与数组指针 函数指针的作用? 打印内存地址 :%p 与 0x%x 38

39 指针的数据类型 定义 int i; int *p; int a[n]; int *p[n]; int (*p)[n]; int f(); int *p(); int (*p)(); int **p; 含义定义整型变量 i p 为指向整型数据的指针变量定义含 n 个元素的整型数组 a n 个指向整型数据的指针变量组成的指针数组 p p 为指向含 n 个元素的一维整型数组的指针变量 f 为返回整型数的函数 p 为返回指针的函数, 该指针指向一个整型数据 p 为指向函数的指针变量, 该函数返回整型数 p 为指针变量, 它指向一个指向整型数据的指针变量 39

40 例下列定义的含义 (1)int *p[3]; (2)int (*p)[3]; (3)int *p(int); (4)int (*p)(int); (5)int *(*p)(int); (6)int (*p[3])(int); (7)int *(*p[3])(int); 指针数组指向一维数组的指针返回指针的函数指向函数的指针, 函数返回 int 型变量指向函数的指针, 函数返回 int 型指针函数指针数组, 函数返回 int 型变量函数指针数组, 函数返回 int 型指针 40

41 关于 野指针 野指针 产生的 3 种原因 : 指针变量没有被初始化 任何指针变量刚被创建时不会自动成为 NULL 指针, 它的默认值是随机的 指针 p 被 free 之后, 没有置为 NULL, 让人误以为 p 是个合法的指针 指针操作超越了变量的作用范围 避免 野指针 产生的对策 : 使用指针前一定要保证它指向了有效的内存空间 ( 或者申请, 或者让指针指向一块合法的空间 ; 不要忘记为数组和动态内存赋初值 用 malloc 申请内存之后, 应该立即检查指针值是否为 NULL 防止使用指针值为 NULL 的内存 ; 用 free 释放了内存之后, 立即将指针设置为 NULL 避免数组或指针的下标越界, 特别要当心发生 多 1 或者 少 1 操作

42 Q&A 本讲结束!

没有幻灯片标题

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

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 - 5. 指针Pointers.ppt [兼容模式]

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

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

《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

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

PowerPoint 演示文稿

PowerPoint 演示文稿 第六讲 指针与字符串 为什么指针 持久动态内存分配 字符串 ( 字符数组 ) 指针 什么是指针 指针的定义与运算 指针与一维 ( 二维 ) 数组 指针数组 指针与引用 指针与函数 2 指针定义 什么是指针 指针变量, 简称指针, 用来存放其它变量的内存地址 指针的定义 类型标识符 * 指针变量名 声明一个指针类型的变量, 星号后面可以留空格 类型标识符表示该指针所指向的对象的数据类型, 即该指针所代表的内存单元所能存放的数据的类型

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++ 程式設計

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 PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

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

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

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 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

第4章 栈和队列

第4章  栈和队列 期中考试成绩统计结果 ( 平均 :68) 第 9 讲指针与引用 (Part I) 周水庚 2017 年 11 月 23 日 提要 指针 指针和数组 提要 指针 指针和数组 指针与指针的作用 指针是 C 语言中用于表示程序对象地址的一类数据 指针的作用 间接引用它所指的对象 描述数据和数据之间的关系, 以便构造复杂的数据结构 利用各种类型指针形参, 能使函数增加活力 指针与数组结合, 使引用数组元素的形式更加多样

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

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

C

C C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;

More information

第五讲 数组 一维数组 二维数组 数组作为函数参数

第五讲 数组 一维数组 二维数组 数组作为函数参数 第五讲 数组 一维数组 二维数组 数组作为函数参数 一维数组 2 数组 数组 : 具有一定顺序关系的若干相同类型变量的集合体 一维数组的声明 类型标识符变量名 [n] 声明一个长度为 n 的数组 ( 向量 ) 类型标识符 : 数组元素的数据类型 ; n: 数组的长度, 即元素的个数 ; 例 : int x[5] // 声明一个长度为 5 的一维数组 一维数组的引用 变量名 [k] // 注 : 下标

More information

Microsoft PowerPoint - 0 C复习.ppt [兼容模式]

Microsoft PowerPoint - 0 C复习.ppt [兼容模式] C 复习 董洪伟 http://hwdong.com 1 程序 : 数据 + 处理 ( 运算 ) 数据 : 变量和常量 int i = 3; 初始化式 变量需要定义 : 类型变量名 ; 类型变量名 = 变量或常量 ; doule pi, r=3.45,area; char var= A ; 类型变量 1, 变量 2, 变量 3; 同时定义多个变量, 逗号隔开 2 运算 : 用运算符对数据进行处理 y

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

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

c语言面试题总结.doc

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

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 月 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

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

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

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

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

<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

从问题到程序——指针

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

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++ 程序设计 告别 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

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

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

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

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

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 在第 2 章中已经对 C 语言变量的声明 定义及初始化进行了介绍, 并简单介绍了 C 语言变量的作用域, 本章将对变量的存储方式进行详细的介绍, 不同存储方式的变量有不同的生命期, 作用域也各不相同 通过对 C 语言变量存储方式的介绍, 使更加深入的了解 C 语言变量的作用域的工作原理 本章讲述的知识点包括 : C 语言变量的生存期和作用域 ; C 语言局部变量与全局变量 ; C 语言变量的存储方式

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

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

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

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

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 思考题 1 函数总需要从 main 中调用吗? 当调用一个函数时, 为什么要使用参数? 函数不是总需要从 main 函数中调用, 使用参数的目的是为了给被调函数传递数据 2 什么是函数的返回值? 是否每个函数都有返回值?

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i; double d; 数据 (Fields) char c; void set(double

More information

Microsoft PowerPoint - 08 指针

Microsoft PowerPoint - 08 指针 能源与动力工程学院 目录 指针 (Pointer) 陈 斌 第二节指针数组第四节指针的应用 Fortran 90/95 引入了指针的概念 指针变量的声明方法为 : Fortran 语言中, 一个指针变量可以动态地指向某个数据对象, 或者说, 对此数据对象起了一个别名 Fortran 中的指针与 C 语言中的指针并不相同, 因为它并不代表一个变量在内部存储单元中的地址, 而是代表这个变量的别名, 实质上它相当于

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

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l

试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期  开放本科  期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. l 试卷代号 ~1075 座位号 E 口 国家开放大学 ( 中央广播电视大学 )20]5 年秋季学期 " 开放本科 " 期末考试 C 十十语言程序设计 试题 同二二十斗 2016 年 1 月 巴叫一 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 c++ 程序中都必须包含有这样一个函数, 该函数的函数名为 ( ) A. main

More information

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期  开放本科  期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new 试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 C 十 + 程序中都必须包含有这样一个函数, 该函数的函数名为 ) A.main

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

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

Guava学习之Resources

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

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i;

More information

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft PowerPoint - 10 模板 Template.pptx 模板 Tempalte 泛型编程的需要 Why Templates? 设想你对整数类型实现了一个排序算法 : void sort(int *is,int n); 用该函数可以对实 复数或工资单排序吗? 模板可以复用源代码 - 泛型编程. inline void Swap( int &x, int &y){ int t = x; x = y; y =t; inline void Swap(double

More information

第5章 递归 (Recurve)

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

More information

untitled

untitled 1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete

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

第六讲 数组、指针与字符串

第六讲 数组、指针与字符串 第六章数组指针与字符串 本章主要内容 数组 指针 动态存储分配 指针与数组 指针与函数 vector 的基本用法 字符串 深度探索 2 数组的概念 数组是具有一定顺序关系的若干相 同类型变量的集合体, 组成数组的变量 称为该数组的元素 数组属于构造类型 数组3 数组名的构成方法与一般变量名相同 数组一维数组的声明与引用 一维数组的声明 类型说明符数组名 [ 常量表达式 ]; 例如 :int a[10];

More information

幻灯片 1

幻灯片 1 信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 函数指针 ( 教材 P107) 2 基本概念 程序运行期间, 每个函数都会占用一段连续的内存空间 而函数名就是该函数所占内存区域的起始地址

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 7.5 函数的嵌套调用 C 语言的函数定义是互相平行 独立的 即函数不能嵌套定义 但可以嵌套调用函数 即调用一个函数的过程中, 又可以调用另一个函数 7.5 函数的嵌套调用 main 函数 1 调用 a 函数 2 a 函数 3 调用 b 函数 4 b 函数 5 9 8 7 6 结束 7.5 函数的嵌套调用 例 7.5 输入 4 个整数, 找出其中最大的数 用函数的嵌套调用来处理 解题思路 : main

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

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

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

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

プログラムの設計と実現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

PowerPoint 演示文稿

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

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

C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 3 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 圆 1 圆 设计圆类 包含 包含基本属性和基本属性访问接口 计算面积和周长接口 2 1 圆 1 #include 2 using namespace std ; 3 c l a s s CCircle 4 { 5 p r i v a t e : 6 double r ; 7 const

More information

Microsoft Word - 第3章.doc

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

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

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

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

Microsoft PowerPoint - 06_Struct.ppt

Microsoft PowerPoint - 06_Struct.ppt C 程序设计语言 第 6 章章结构 孙志岗 sun@hit.edu.cn http://sunner.cn 从基本数据类型 复合数据类型到抽象数据类型 类型本不存在 内存里存储的内容, 你认为它是什么, 它就是什么 高级语言设计了基本数据类型 : 整型 浮点型 字符型等 不同的语言也会定义不同的基本类型 基本数据类型并不能方便地解决所有问题 复合数据类型是基本数据类型迭代派生而来 典型的代表就是 结构,,

More information

文件

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

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

2001年(下)局域网技术与组网工程试卷答案

2001年(下)局域网技术与组网工程试卷答案 二 一年上半年全国高等教育自学考试计算机基础与程序设计试卷 一 单项选择题 ( 本大题共 20 小题, 每小题 1 分, 共 20 分 ) 在每小题列出的四个选项中只有一个选项是符合题目要求的, 请将正确选项前的字母填在题后的括号内 1.I/O 设备指的是计算机的 ( ) A 存储设备 B 输入和输出设备 C 控制器 D 运算器 2. 具有只读功能的内存储器是指 ( ) A ROM B RAM C

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

[改訂新版]C言語による標準アルゴリズム事典

[改訂新版]C言語による標準アルゴリズム事典 iii C 1991 SEND + MORE = MONEY C 100 2003 Java 2003 27 PC-9800 C BMP SVG EPS BMPSVG WindowsMacLinux Web iv int main() int main(void) EXIT_SUCCESS 0 https://github.com/okumuralab/ algo-c TEX TEX PDF PDF

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

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

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

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

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

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

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

Microsoft PowerPoint - Compiler-7 - Runtime Environment.ppt [兼容模式]

Microsoft PowerPoint - Compiler-7 - Runtime Environment.ppt [兼容模式] 本 章 主 要 内 容 运 行 时 环 境 (Runtime Environment) 目 标 程 序 运 行 时 的 活 动 运 行 存 储 的 划 分 静 态 存 储 分 配 栈 式 存 储 分 配 堆 式 动 态 存 储 分 配 LI L. 1 运 行 时 环 境 变 量 名 的 绑 定 完 全 静 态 环 境 FORTRAN 基 于 栈 的 环 境 C C++ Pascal JavaC++

More information

掌握都有一定难度, 也比较容易用错 因此请读者在学习中特别注意思考, 以逐步理解其本质, 掌握正确的使用方法 下面也特别解释了指针使用中的一些常见错误, 请读者留意 指针是 C 语言的一种重要机制 用好指针机制常常可以使写出的程序更简洁有效 也有些问题必须借助指针才能处理 指针在较大的复杂软件的中使

掌握都有一定难度, 也比较容易用错 因此请读者在学习中特别注意思考, 以逐步理解其本质, 掌握正确的使用方法 下面也特别解释了指针使用中的一些常见错误, 请读者留意 指针是 C 语言的一种重要机制 用好指针机制常常可以使写出的程序更简洁有效 也有些问题必须借助指针才能处理 指针在较大的复杂软件的中使 第七章指针 本章讨论指针及其在程序中的重要作用, 包括变量地址与指针的概念,C 程序里指针的基本定义和使用, 指针和数组的关系, 函数的指针参数, 动态存储分配等问题 7.1 地址与指针 程序执行中所用的数据都存于内存 任何数据对象在能用期间都有存储位置, 占据一定数量的存储单元 内存单元按顺序排, 每个单元有一个称为内存地址的编号, 内存数据都是通过地址访问的 高级语言把存储单元 地址等低级概念用变量等高级概念掩盖起来,

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

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

Static Enforcement of Security with Types

Static Enforcement of Security with Types 例题 1 一个 C 语言程序及其在 X86/Linux 操作系统上的编译结 果如下 根据所生成的汇编程序来解释程序中四个变 量的存储分配 生存期 作用域和置初值方式等方面 的区别 static long aa = 10; short bb = 20; func( ) { } static long cc = 30; short dd = 40; static long aa = 10; func(

More information

untitled

untitled 串 串 例 : char ch= a ; char str[]= Hello ; 串 列 ch=getchar(); scanf( %c,&ch); 串 gets(str) scanf( %s,str); 8-1 數 ASCII 例 : char ch= A ; printf( %d,ch); // 65 A ascii =0x41 printf( %c,ch); // A 例 : char ch;

More information

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

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

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

Untitled

Untitled 429_1 429_2 429_3 429_4 1 429_5 429_6 429_7 429_8 2 429_9 429_10 429_11 429_12 3 429_13 429_14 429_15 4 429_16 429_17 429_18 5 429_19 429_20 429_21 429_22 6 429_23 429_24 429_25 7 429_26 429_27 429_28

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

PowerPoint Presentation

PowerPoint Presentation C++ 程序设计 第 12 章管理 计算机学院黄章进 zhuang@ustc.edu.cn 内容 管理 12.1 (12.1.2) 12.2 动态数组 (12.2.1) 2 对象生存期 之前程序中所使用的对象有严格定义的生存期 全局对象在程序启动时分配, 在程序结束时销毁 局部自动对象在进入定义所在块中被创建, 在离开块时销毁 局部静态对象在第一次使用前分配, 在程序结束时销毁 C++ 还支持动态分配对象

More information

4 18 19 [1] (p.28) 50 2500 18 19 1 1. 2 2. / / 3 4 [1] (p.26) [2] (p.171) 3 1998 4 13 4

4 18 19 [1] (p.28) 50 2500 18 19 1 1. 2 2. / / 3 4 [1] (p.26) [2] (p.171) 3 1998 4 13 4 2012 13 No.13,2012 History Teaching 650 Sum No.650 510631 [ ] [ ]G63 [ ]B [ ]0457-6241 2012 13-0003-11 [1] pp.25~26 1 2.4 30 62 30 102 28 =30 2 2012-05-07 3 4 18 19 [1] (p.28) 50 2500 18 19 1 1. 2 2. /

More information

第 10 章结构体和枚举教案 一 授课题目 ( 教学章 节或主题 ) 10.1 结构体及结构体变量 10.2 结构体数组 二 教学时间安排 上课 2 学时 三 教学目的 要求 知识目标 : 学习结构体变量和结构体数组的定义和引用能力目标 : 掌握结构体的初步应用情感目标 : 通过结构体编程实践获得成

第 10 章结构体和枚举教案 一 授课题目 ( 教学章 节或主题 ) 10.1 结构体及结构体变量 10.2 结构体数组 二 教学时间安排 上课 2 学时 三 教学目的 要求 知识目标 : 学习结构体变量和结构体数组的定义和引用能力目标 : 掌握结构体的初步应用情感目标 : 通过结构体编程实践获得成 第 10 章结构体和枚举教案 一 授课题目 ( 教学章 节或主题 ) 10.1 结构体及结构体变量 10.2 结构体数组 二 教学时间安排 上课 2 学时 三 教学目的 要求 知识目标 : 学习结构体变量和结构体数组的定义和引用能力目标 : 掌握结构体的初步应用情感目标 : 通过结构体编程实践获得成就感, 提升 C 语言编程的兴趣 四 教学重点或难点 教学重点 : 结构体数组成员的引用 教学难点 :

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

Guava学习之CharSequenceReader

Guava学习之CharSequenceReader CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类

More information

C/C++ - 结构体、共用体、枚举体

C/C++ - 结构体、共用体、枚举体 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 C C (struct) C 2 C C (struct) C 2 i // book.c: # include < stdio.h> # define MAX_ TITLE 41 # define MAX_ AUTHOR 31 struct book { char title [ MAX_ TITLE

More information

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - ACL chapter02-5ed.docx 第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131

More information