C问题――指针.

合集下载

c语言试题及答案 (2)

c语言试题及答案 (2)

C语言部分一、选择题(每小题2分,共10分)(下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。

错选或漏选均不得分)。

1、若定义:int a[2][3]{0,2,4,6,8,10};以下描述正确的有( A,C,D,E )A、*(a+1)为元素6的地址这里a+1=a[1]的地址;*(a+1)的值是6,故A正确。

B、*(a[1]+1)的值为2为8,故B不正确C、**(a+1)+2的值为8这里a+1是一个指针,指向的是a[1]. *(a+1)为a[1],a[1]指向的是a[1][0]. **(a+1)为6,加2得8,故C正确;D、a[0]与a相同因二者都是指针,指针的地址都是指向数组中的第一个元素的地址,故D正确。

E、a[1][2]的值为10它是指第二行的第三个元素,为10,正确2、对函数的正确使用方法描述( A,C,D )。

A、用数组做函数参数时,必须在主调函数和被调函数中分别定义数组B、实参数组元素和形参数组元素类型可以不一致C、形参数组长度可以不指定D、形参数组长度可以大于实参数组长度E、数组名做参数属于值传递3、对静态变量的正确描述( A,B,D,E )A、静态局部变量在静态存储区内分配单元()B、静态外部变量可以赋初值,也可以不赋初值C、静态外部变量的作用与外部变量相同D、静态局部变量在函数调用结束时,仍保存其值,不会随着消失。

E、静态局部变量只赋一次初值4、下列描述正确的是( A ,C)。

A、由main 函数及其参数argc和* argv[]可以实现命令行方式B、使用fclose关闭文件时,先释放文件指针,再写缓冲区数据到文件中//先写缓冲区数据到文件中,再释放文件指针C、字符数组并不要求它的最后一个字符是‘\0’//是的,以字符指针指向的字符串才要求,因为只有这样,才能知道字符串的长度,而在字符数组中,不用\0,一样可以知道到哪里是字符数组的结尾。

PDP老虎型,孔雀型,猫头鹰型,考拉型,变色龙型人才测评

PDP老虎型,孔雀型,猫头鹰型,考拉型,变色龙型人才测评

2
选择性的沟通者、好深思的、
不多言的、1 多思考.
1
Copyright 1986,修正 2004,PDP, Inc 公司
孔雀0 型的经典语言:0 明天会更好! 0
支配 性 表达 性 耐 心 /步 调 精确 性 逻辑 能量风格 能量水平 支配 性 表达 性 耐 心 /步 调 精确 性 逻辑 满意 度 能量耗损 支配 性 表达 性 耐 心 /步 调 精确 性 逻辑 能量风格 能量
2
不重细节的、只重原则大纲、
见林不见树.
1
1
1
猫头鹰型的经典语言:众人皆醉我独
醒! 0
0
0
Copyright 1986,修正 2004,PDP, Inc 公司
支配性 表达性 耐 心 /步 调 精确性 逻辑 能量风格 能量水平 支配性 表达性 耐 心 /步 调 精确性 逻辑 满意度 能量耗损 支配性 表达性 耐 心 /步 调 精确性 逻辑 能量风格 能量
自然本我/ 天生本我
7
优先级 环境因素
整合型 7
预测指针/ 外在的自己
7
常模上下在50分以
6
6
6

5
5
5
特质的形容
4
K
T S A
3
配合度高、演什么4像什么、去调整自己 4
的角色、性情中庸、立场中立、往往没K
有预设立场、容易3适应环境、没有敌人 3
是他们的最高指导K 原则.
S
事实
2
2
感觉 低
代表人物: 周恩来
自然本我/ 天生本我
7
6
5
K A
优先级 环境因素
预测指针/ 外在的自己
高耐心型

指针ppt课件

指针ppt课件
该一般形式说明以下几个方面的内容:首先定义变量为指针变量,其 次是该变量能指向一种指针对象,最后是被指向的指针对象能指 向的对象的类型。 例如 int **pp, *ip, i; ip = &i;
pp = &ip; 定义说明pp是指向指针的指针变量;它能指向的是这样一种指针对 象,该指针对象是能指向int型的指针变量。如上述代码让pp指向 指针变量ip,ip指向整型变量i。
int n;
int *p=&n;
int *q=p; int *px=0;是把一个指针初始化为空指针。
2020/12/13
面向对象程序设计
例1: 指针的概念 main() { int a; int *pa=&a; a=10; cout<<“a=“<<a<<endl; cout<<“*pa =“<< *pa <<endl; cout<<“&a =“<< &a <<endl; cout<<“pa =“<< pa <<endl; cout<<“&pa =“<< &pa <<endl;
y=++(*px) px 的目标变量的值加 1 后赋予 y。
2020/12/13
面向对象程序设计
(3)、 指针的相减 设指针p和q是指向同一组数据类型一致的数据,
则p-q运算的结果值是两指针指向的地址位置之间的 数据个数。
例: 统计输入字符串的字符个数 main() {char str[20]; char *p;
2020/12/13

《c++程序设计》第7章 指针

《c++程序设计》第7章 指针
2.指针变量的赋值
(1)取地址运算符&: 取出变量的内存首地址
(2)指针变量的赋值: 指针变量=&变量;或指针变量=指针变量;
3.指针变量的引用
指针运算符* :通过指针变量间接访问变量对应存储单元内容。
【例7.1】定义指针变量
p、p1、q,并将变量a的 地址赋给p、p1,输出a、 p、p1、*p、*p1的值。
【例7.3】指针变量的自加、自减、加n和减n运算。例程
3.指针变量的关系运算
指针变量的关系运算是指针变量值的大小比较,即 对两个指针变量内的地址进行比较,主要用于对数组元 素的判断。
【例7.4】用指针变量求一维实型数组元素和,并输出数组每个元 素的值及数组和。 例程
4.指针运算符的混合运算与优先级
指针数组
例如,指针数组的定义: int *pi[4];
表示定义了由4个整型指针元素pi[0]、pi[1]、pi[2]、pi[3]组成的整型指针数组。 char *pc[4];
表示定义了由4个字符型指针元素pc[0]、pc[1]、pc[2]、pc[3]组成的字符型指针数组。 (3)指针数组元素的引用 【例7.15】用指针数组输出字符串
3.数组元素的引用
对一维数组a[ ]而言,当p=a时: ①第i个元素地址:&a[i]= p+i=a+i。 ②第i个元素值:a[i]= *(p+i) =*(a+i)=p[i]。
一维数组的第i个元素有四种方式引用: a[i]、*(p+i) 、*(a+i)、p[i]。
用数组指针的四种方法求一维数组中的最大值的方法为: 方法一:使用*(a+i)访问a[i] 方法一:用指针变量名p代替数组名a,即用 p[i]代替a[i] 方法二:移动指针变量p++,用*p访问a[i] 方法三:使用*(p+i)访问第 i个元素a[i]

C语言——指针

C语言——指针

4. 结论: 若要使变量的值通过函数调用而发生改变, 则形参必须是指针型,实参为地址量(&<变量名>)
或指针型。
另:全局变量和数组名作为参数也可改变变量的值.
总 结
若要使n个变量的值通过函数调用而发生改变,则
在主调函数中设n个变量,用n个指针变量指向它们。 将这些指针变量作为实参,将其地址传递给被调函
p1 p &a p2 &b p1 &b p2 &a
a 5
b 9
a 5 b 9
}
5,9 9,5
三、指针变量作为函数参数 前面讲过:数值型变量作为函数实参 形参数据值的改变不会影响实参。 但当用地址(指针变量)作参数时,作用为传址, 与数组名类似。 要求:形参、实参均为地址量。
单向 传递
形参,于是,
例:实现10.2 swap(int *p1, int *p2) { int temp; temp=p1; p1=p2;p2= temp; } #include <stdio.h> void main( ) { int a, b;
它代表的是地址+1个单位
重要概念: 指针变量也有各种类型(如上面所示),但指针变 量的值只能是整型值。
二、指针变量的引用方式 *指针变量名----表示所指变量的值。 指针变量名----表示所指向变量的指针(地址)。
两个运算符号:
&: 取地址运算符。 &i *: 指针运算符,取其指向的内容(所指变 量的值)。 *p
9,0,10
10,9,0
§10.3 数组与指针
一个变量的地址为该变量的指针。当用一个变 量来存放地址(指针)时,该变量称为指针变量。
一个数组元素相当于一个简单变量。于是,亦 可用一个指针变量来指向数组元素。

C语言程序设计

C语言程序设计

C语言程序设计上机实验报告实验一一、实验名称: C程序的运行环境和运行C程序的方法二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C程序三、实验内容:(1). 输入并运行一个简单的C程序。

(2). 设计程序,对给定的两个数求和。

(3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。

四、源程序代码:代码1:#include<stdio.h>int main(){printf("hello world!\n");return 0;}运行结果1:程序分析1:代码2:#include<stdio.h> int main(){int a=5,b=6,c;c=a+b;printf("c=%d\n",c);return 0;}运行结果2:程序分析2:代码3:#include<stdio.h>int main(){int a=5,b=6,c;if(a>b){c=a;}else{c=b;}printf("%d\n",c);return 0;}运行结果3:程序分析3:五.实验总结C语言程序设计上机实验报告实验二一、实验名称:顺序结构程序设计二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法,熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。

三、实验内容:(1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。

(3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。

(4). 编写程序,实现单字符getchar和putchar输入输出。

(5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。

四、源程序代码代码1:#include<stdio.h>int main(){char c1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1-32;printf("%c,%d\n",c2,c2);return 0;}运行结果1:程序分析1:代码2:#include<stdio.h>int main(){int a=5,c1,c2;double b=3.141592653,c3,c4;c1=a/b;c3=a/b;c2=a+b;c4=a+b;printf("%d,%d,%lf,%lf\n",c1,c2,c3,c4);return 0;}运行结果2:程序分析2:代码3:#include<stdio.h>int main(){here: printf("计算三角形的面积请输入‘1’,立方体的体积和表面积请输入‘2’,圆的面积和周长请输入‘3’.\n");int a;scanf("%d",&a);if(a==1){double l,h,s;printf("请输入三角形的底边长和所在底边的高.");scanf("%lf%lf",&l,&h);s=l*h/2;printf("三角形的面积为%.16f\n",s);}else if(a==2){printf("请输入立方体的长宽高.");double b,c,d,v,s;scanf("%lf%lf%lf",&b,&c,&d);v=b*c*d;s=b*c+b*d+c*d;printf("立方体的体积为%.16f,表面积为%.16f\n",v,s);}else{double r,s,c,m;printf("请输入圆的半径");scanf("%lf",&r);m=3.141592653;s=m*r*r;c=2*m*r;printf("圆的面积为%.16f,圆的周长为%.16f\n",s,c);}goto here;}运行结果3:程序分析3:代码4:#include<stdio.h> int main(){getchar();putchar('b');return 0;}运行结果4:程序分析4:代码5:#include<stdio.h>int main(){int a;printf("请输入任意十进制整数:");scanf("%d",&a);printf("转换为八进制数为:%o\n转化为十六进制数为:%x\n",a,a); return 0;}运行结果5:程序分析5:五、实验总结C语言程序设计上机实验报告实验三一、实验名称:选择结构程序设计二、实验目的:正确使用逻辑运算符和逻辑表达式,熟练掌握if 语句和switch 语句,学习调试程序。

C语言上机实验试题

C语言上机实验试题

实验一初识Visual C++6.0环境及运行C实例作业:一.选择题1.若int a, b; scanf("%d%d", &a, &b); 不可以用( A )作为输入的分隔符。

A), B)空格 C)回车 D)TAB键2.阅读以下程序,当输入数据的形式是:25,13,10<CR>,正确的输出结果是( D )。

main(){int x,y,z;scanf("%d%d%d",&x,&y,&z);printf("x+y+z=%d",x+y+z);}A)x+y+z=48 B)x+y+z=35 C)x+z=35 D)不确定值3.已知ch是字符型变量,下边正确的赋值语句是( B )A) ch='123'; B)ch='\xff'; C)ch='\08'; D) ch="\";二.填空题1. 以下程序的输出结果是(a= +1124,a=1124 ,x=30.141500,x= 30.142)main(){int a=1124;double x=30.1415;printf("a=%+6d,a=%-6d,x=%f,x=%7.3f",a,a,x,x);}2.以下程序的输出结果是( 36.750000 ) main(){int x=10;float y=26.75;printf("%f",x+y);}实验二 C程序的调试及运算符作业:1.指出下面的是标识符、关键字还是常量。

abc,2,new,struct,″opiu″ ,′k′, ″k″,false ,bnm,true,0xad,045,if ,goto解: abc是标识符,2是整型常量,new、struct是关键字,″opiu″是字符串常量,′k′是字符常量,″k″ 是字符串常量,false是布尔常量,bnm 是标识符,true是布尔常量,0xad是十六进制的整型常量,045是八进制的整型常量,if、goto都是关键字。

《C++程序设计》课后习题参考答案

《C++程序设计》课后习题参考答案
cina[i];
for(j=1;j<14;j++)
for(i=0;i<15-j;i++)
if(a[i]>a[i+1])
{
m=a[i];a[i]=a[i+1];a[i+1]=m;
}
for(i=0;i<15;i++)
cout<<setw(4)<<a[i];
cout<<end1;
}
5.从键盘为1个N×N的整型数组a输入数据,并显示每一行的最大值。
高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案
――武汉大学出版社
习题1参考答案
三、简答题
1.简述三代计算机语言各自的特点。
解答如下:
机器语言是用二进制指令表示的、计算机能够直接识别和执行的语言。由于计算机可以直接执行机器语言,执行速度快是机器语言的主要优点。在计算机发展初期,软件工程师使用机器语言来编写程序。在计算机指令集不断增大的情况下,机器语言不易记忆,不便于学习,软件开发难度大、周期长、易出错,软件维护工作量大等缺点更加突出,机器语言已不能胜任编程工作。
i++
}
cout<<"共有"<<num<<"个单词"<<endl;
}
4.用冒泡法对输入的15个整数按由小到大顺序排列。
程序设计如下:
#include<iostream.h>
#include <iomanip.h>
void main()
{
int i,j,m,a[15];

C++基础面真题

C++基础面真题

1.const符号常量:〔1〕、const char Xp〔2〕、char const Xp〔3〕、char X const p如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。

如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

2.析构函数和虚函数的用法和作用?析构函数的作用是当对象生命期结束时释放对象所占用的资源。

析构函数用法:析构函数是特别的类成员函数它的名字和类名相同,没有返回值,没有参数不能随意调用也没有重载。

只是在类对象生命期结束时有系统自动调用。

虚函数用在继承中,当在派生类中需要重新定义基类的函数时需要在基类中将该函数声明为虚函数,作用为使程序支持动态联遍。

3.堆和栈的区别栈〔stack〕:由编译器自动分配释放,存放函数的参数值,局部变量的值等。

其操作方法类似于数据结构中的栈。

堆:一般由程序员分配释放,假设不释放,程序结束时可能由OS回收。

注意它与数据结构中的堆是两回事,分成分法类似。

4.头文件的作用是什么?1.通过头文件来调用库功能。

在很多场合,源代码不便〔或不准〕向用户公布,只要向用户提供头文件和二进制的库即可。

用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么完成的。

编译器会从库中提取出相应的代码。

2.头文件能加强类型平安检查。

如果某个接口被完成或被使用时,其方法与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

5.内存的分成分法有几种?1.从静态存储地域分配。

内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。

如全局变量。

2.在栈上创立。

在执行函数时,函数内局部变量的存储单元都可以在栈上创立,函数执行结束时这些存储单元自动被释放。

栈内存分配运算内置于处理器的指令集中,效率高,但是分配的内存容量有限。

3.从堆上分配,亦称动态内存分配。

程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。

C++指针与动态分配内存new关键字专题

C++指针与动态分配内存new关键字专题

**x 的内存形式
*y 的内存形式
z 的内存形式
//指向指针的指针 x cout<<**x ;//输出 z 的值 25 cout<<*x ;//输出 y 的值或 z 的地址 50 cout<<x; //输出 y 的地址&y 或**x 的值 100 cout<<*y ;//输出 z 的值 25 cout<<y; //输出 z 的地址&z 或*y 的值 50
2、对二维数组的讲解: a、对一维数组地址的详细讲解:
比如一维数组 a[5],众所周知,一维数组的数组名 a 表示的是第一个元素 a[0]的地址,也就是说数组 名与&a[0]是等价 的,因此数组名 a 的地址,并不是这个一 维数组的数组的地址。那么&a,表示的又是什么呢?因为,a 是一个一 维数 组,所以&a 表示的就是这个一维数组的地址,也就是说&a 中的地址是一个包含有 4 个元素的一 维数组的地址。就好 比 int i 中的&i,才表示的是这个变量 i 的地址一样。 b、对二维数组地址的讲解: 比如二维数组 b[3][4],我们首先从一维开始分析,众所周知 b[0],b[1]分别表示的是二维数组中第一行第一个元素和 第二行第二个元素的地址,也就是说 b[0]是与&b[0][0]等价的,b[1]是与&b[1][0]等介的。因此数组名就与&b[0]等介 的,也就是说数组 名表示的是二维数组中第一行所包含的一维数组的地址,说简单一点,就是说二维数组名是二维数
址里的值。因此只要*后面的变量表示的是一个地址就可以使用*运算符,来求出这个地址中的值,你不用管这个地址 的表示形式是怎样的,只要是地址就可以使用*来求出地址中的值。

VC习题参考答案

VC习题参考答案

VC习题参考答案1.7指针和引用55.已知intd=5,某pd=&d,b=3;求下列表达式的值。

A.某pd某bB.++某pd-bC.某pd++D.++(某pd)答:15,3,5,656.选择填充。

(1)选择正确的说明语句为()。

A.intN['b'];B.intN[4,9];C.intN[][];D.int某N[10];答:B(2)若有定义:inta=100,某p=&a;则某p的值是()。

A.变量p的地址B.变量a的地址值C.变量a的值D.无意义答:C.(3)下述程序的输出结果是()。

#includevoidmain(){inta[5]={2,4,6,8,10};int某p=a,某某q=&p;cout<A.4,4B.2,2C.4,2D.4,5答:B(4)下述程序片段的输出是()。

inta[3][4]={{1,2,3,4},{5,6,7,8}};int某,某p=a[0];某=(某p)某(某p+2)某(某p+4);cout<A.15B.14C.16D.13答:A(5)若有以下定义,则下列对数组引用正确的是()。

int(某q)[3]=newint[2][3];A.q[2][3]B.某qC.某(某q+2)D.某(某(q+2)+3)答:C(6)若要用如下程序片段使指针变量p指向一个存储动态分配的存储单元:float某p;p=(float某)newfloat;则空白处应填入:A.float某B.某floatC省略;D.(float)(7)下列表示引用的方法中,()是正确的。

已知:intm=10;A.int&某=m;B.int&y=10;C.int&z;D.float&t=&m;答:A57.分析下列程序的结果。

#includeint&fun(intn,int[]){int&m=[n];returnm;}voidmain(){int[]={15,4,3,2,1,0};fun(3,)=10;cout<答:1058.用指针作为函数的参数,设计一个实现两个参数交换的函数。

实验六 指针与引用

实验六  指针与引用

实验六指针与引用一、目的和要求1.掌握指针、指针变量、指针常量的基本概念;2.掌握指针与数组、指针与函数的关系及应用。

3.初步掌握引用的概念及简单应用。

二、实验设备及分组1.Windows XP操作系统;2.Visual C++6.0语言环境;3.每人一台PC机。

三、内容和步骤(一)验证实验程序1.指针变量的自加、自减、加n和减n运算。

假设数组a的首地址为1000。

解:# include <iostream.h>void main( ){int a[5]={0,1,2,3,4};int *p;p=&a[0]; //p指向a[0],p=1000p++ ; //p指向下一个元素a[1],p=1004cout<< *p<<'\t'; //输出a[1]的内容1。

p=p+3; //p指向下3个元素a[4],p=1016cout<< *p<<'\t'; //输出a[4]的内容4。

p――; //p指向上一个元素a[3],p=1012cout<< *p<<'\t'; //输出a[3]的内容3。

p=p―3; //p指向上3个元素a[0],p=1000cout<< *p<<'\t'; //输出a[0]的内容0。

}运行结果:1 4 3 02.指出下列程序的错误。

#include <iostream.h>void exchange(int,int);void main(){int a,b;cin>>a>>b;cout<<"Before Exchange:a="<<a<<",b="<<b<<endl;exchange(a,b);cout<<"After Exchange:a="<<a<<",b="<<b<<endl;}void exchange(int x,int y){int t;t=x;x=y;y=t;}分析:本例的目的是在子函数中交换的两个变量的值,在主函数中使用。

C语言试题+提纲

C语言试题+提纲

计算机应用(C语言):100分一、选择题;二填空题;三、判断题;四、根据程序写出结果;五、补充完善程序;根据题目要求完善程序;计算机应用上机(C语言):100分共3道大题,其中自定义函数并调用一定存在,主要参考实验、典型例题以及少量自编考试题。

计算机应用和应用上机(C语言)fx提纲第一章1、C语言的特点2、C语言的基本操作与常使用的快捷键等visual Studio6.0环境:原程序、编译、组建和运行后程序的后缀和快捷方式分别为??(visual C++6.0环境下执行相对应的操作后左下角显示后缀名)第二章1、算法的定义与特点一个算法应该具有以下特点:___、______,零个或多个输入,一个或多个输出,___ __。

2、表示算法的常用方法3、结构化程序设计的基本结构结构化程序设计的三种基本程序结构为_______、___ _____、___ _____。

第三章1、常用的数据类型(int,float和char)以及不同数据类型占用的字节数和有效数字和有效范围(输出结果)visual C++6.0中数据类型float的数占的字节数为( ) 。

A)1 B)2C)4 D)32、正确与错误的标识符的判定——正确条件:(1)只能使用字母、数字和下划线_;(2)首字符只能是字母或下划线_;(3)不能使用关键字作为标识符;正确的自定义标识符是()A) #33 B) a>bC) tt D) 3days3、常量、变量等的定义4、字符常量的特殊符号(如\)和转义符号的正确判断——(1)注意特殊转移字符如\n,\t,\v,\\,\‘等;(2)注意\ddd和\xhh,其中ddd只能是3位八进制的数0-7,hh是2位16进制的数,0-9和A,B,C,D,E,F错误的转义字符是( ) 。

A)'\091' B) '\\'C) '\0' D) '\'''以下常用转义符号代表换行的是( ) 。

对口升学 职高 二年级C语言期末试卷

对口升学 职高 二年级C语言期末试卷

对口升学职高二年级C语言期末试卷对口升学职高二年级c语言期末试卷对口升学二年级2021年6月c语言期末试题(总分130分后)班级:__________姓名:__________一、单选题(每小题3分后,共45分后)1.c语言中函数返回值的类型是由()决定。

a)return语句的表达式类型b)调用函数的主调函数类型c)调用函数时临时d)定义函数时所选定的函数类型2.变量的指针,其含义就是指本变量的()。

a)值b)地址c)名d)一个标志3.以下程序运行后的输出结果为()。

int*f(int*x,int*y){if(*x{inta=7,b=8,*p,*q,*r;p=&a,q=&b;r=f(p,q);printf(\a)7,8,8b)7,8,7c)8,7,7d)8,7,84.以下函数定义恰当的就是:()。

a)doublefun(intx,inty)b)doublefun(intx;inty)c)doublefun(intx,inty);d)doublefun (intx,y)5.c语言规定,直观变量并作实参,它与对应形参之间的数据传达方式就是:()。

a)地址传递;b)单向值传递;c)双向值传递;d)由用户指定传递方式6.以下正确的函数形式是:()。

a)doublefun(intx,inty)b)fun(intx,y){z=x+y;returnz;}{intz;returnz;}c)fun(x,y)d)doublefun(intx,inty)第1页――共8页{intx,y;doublez;{doublez;z=x+y;returnz;}z=x+y;returnz;}7.设已有定义:inta[10]={15,12,7,31,47,20,16,28,13,19},*p;下列语句中正确的是()a)for(p=a;a8.若有inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];则b 中的值是()a)5b)6c)8d)99.有如下程序intfunc(inta,intb){return(a+b);}main(){intx=2,y=5,z=8,r;r=func(f unc(x,y),z);printf(“%d\\n”,r);}该程序的输入的结果就是()。

指针(pointer)――C C 的精髓.

指针(pointer)――C C  的精髓.

指针(pointer——C/C++的精髓!你不得不学好它!指针(pointer指针是一种数据类型,用于存放某个变量的地址值。

此时该指针被称为是指向该变量。

一个指针的类型决定于它所指向的变量的类型。

指针既可指向基本数据类型(即预定义数据类型),又可指向数组、函数、类和文件等用户自定义数据类型。

指针可以初始化为0、NULL(即0,这是标准库头文件中定义的符号化常量)或一个地址。

内容为0或NULL的指针不指向任何变量,称为空指针。

例如:int a;int *ptr;指针ptr在下式中被初始化为指向变量a。

ptr = &a;两条语句也可组合地表示为:a = *ptr;其中&为存地址运算符,而*则为取内容运算符。

int a, *ptr;ptr = &a;指针与数组数组名是一个指向该数组的常量指针(其值不能改变),也是该数组中首单元的地址值。

一维数组的指针如下:int arr[5] = { 1, 3, 5, 7, 9 };int *ptra;ptra = arr;数组指针与数组名两者的异同:(1)整型变量指针ptr与整型数组指针ptra的说明格式相同,其间空格可放可不放。

(2)arr既是数组名,又是数组地址,还是数组指针(称为常量指针),三位一体。

因此arr可在一定范围内与ptra等效地使用。

[ ]可在一定范围内与 * 等效地使用。

但arr不准重新赋值。

例如:arr[0]即*arr即*ptra即ptra[0] = 1arr[3]即*(arr+3即*(ptra+3即ptra[3] = 7但arr的使用不如ptra灵活,如:不允许*arr++,而允许*ptra++。

见以下例子:§2.2中[例1]的主程序void main({int arr[5] = {1, 3, 5, 7, 9};for ( int i = 0; i < 5; i++cout << arr[i] << endl; //数组名}其中的for语句可改为:for ( int i = 0; i < 5; i++cout << *(arr+i << endl; //指针// 但不允许arr加减,即不允许:// cout << *(arr++ << endl; not allowed但可使用以下指针ptra:int *ptra = arr;for ( int i = 0; i < 5; i++cout << *(ptra++ << endl;// 此处可以将指针加减(3)字符串与字符数组:字符串一般使用指针(包括变量指针和常量指针两种方式)表示其地址和内容,此地址也即其第一个字符的地址。

大学计算机C语言之指针

大学计算机C语言之指针
第10章指针
10.1 地址和指针
JSU
• 变量四个基本要素
名称 地址 内容 类型
X 2002 378
• &X----变量X的地址 • 指针:一种特定的存储单元,单元内存 储的是另一个单元的地址。
江苏大学计算机学院
1
第10章指针
• 访问存储单元(变量)可以通过两种方 式实现:
JSU
– 直接访问----通过名称访问 – 间接访问----通过指针(地址)访问 变量X的地址 &X----变量X的地址(F002)
江苏大学计算机学院
JSU
Main() {int a[5]={2,3,4,5,6},i,*p; for(p=a;a<(p+5);a++) printf(―%d\n‖,*a);} Main() {int a[5]={2,3,4,5,6},i,*p=a; while(p++<(a+5) ) printf(―%d\n‖,*p);}
23
3、数组名作为函数参数(地址传递)
16
10.3 指针与数组
使用指针变量输出
JSU
Main() {int a[5]={5,6,7,8,9},i,*p=a; for(i=0;i<5;i++) printf(― %d‖,*(p+i)); printf(―\n‖);} 问题:将上面的printf(― %d‖,*(p+i))换成 printf(― %d‖,*p++)结果如何?
Void swap(int *x,int *y) {int t; t=*x;*x=*y;*y=t;} Main() {int a=3,b=8; swap(&a,&b); printf(“%d,%d\n”,a,b);}

计算机三级c语言公共基础

计算机三级c语言公共基础

公共基础课本总结第1章数据结构与算法1.1算法算法:是指解题方案的准确而完整的描述。

算法的基本特征:可行性、确定性、有穷性(有限的时间)、拥有足够的情报。

*算法的控制结构:算法中各操作之间的执行顺序。

包括:顺序、选择、循环算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法算法的复杂度:时间复杂度(算法所需要的计算工作量,即算法所执行的基本运算次数)、空间复杂度(执行这个算法所需要的内存空间)1.2数据结构的基本概念数据结构:是指相互有关联的数据元素的集合。

所谓结构就是指数据元素之间的前后件关系。

在数据结构中没有前件的结点称为根结点,没有后件的结点为叶子结点(终端结点)。

数据结构研究的三个问题:1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构。

2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。

3)对各种数据结构进行的运算。

*数据的逻辑结构:指反应数据元素之间逻辑关系的数据结构。

*数据的存储结构(物理结构):数据的逻辑结构在计算机存储空间中的存放形式。

(常用:顺序、链接、索引等结构)数据处理]是指对数据集合中的各元素以各种方式进行运算,包括插入、删除、查找、更改等运算,也包括对数据元素进行分析空的数据结构:一个元素都没有的数据结构。

数据结构分类:线性结构、非线性结构。

*线性结构:有且只有一个根结点,每一个结点最多有一个前件,也最多有一个后件。

(线性表、栈、队列、线性链表)*非线性结构:不满足线性结构特点的数据结构。

树、二叉树、图1.3线性表及其顺序存储线性表由一组数据元素组成。

线性表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。

线性表中数据元素的个数n称为线性表的长度。

线性表可以为空表:n=0。

线性表是一种存储结构,它的存储方式:顺序和链式。

线性表的顺序存储结构有两个基本特点: 1.所有元素所占的存储空间是连续的。

vc题库2

vc题库2

一、单项选择题1.下列选项中不属于C++的类型的是 D 。

A. signed short intB. unsigned long intC. unsigned intD. long short2.在C++语言中,080是 D 。

A. 十进制数B. 八进制数C. 十六进制D. 非法数3. 在C++中,合法的长整型常数是A。

A. 0LB. 4962710C. 0.054838743D. 2.1869e104. 字符串常量“ME”的字符个数是 C 。

A.1 B. 2C. 3D. 45. 有如下表达式19/3*sqrt(4.0)/5,则该表达式值数据类型为 C 。

A.int B. floatC. doubleD. 不确定6. 在C++中,合法的字符常量是 B 。

A.‘\084’ B. ‘\x43’C. ‘ah’D. “0”7. 以下程序段输出的结果是 C 。

char c=”\41”;printf(“%d”,c);A.A B. 41C. 语法错D. 658. 若d为double型变量,则表达式d=1,d+5,d++的值是 D 。

A. 1B. 6.0C. 2.0D. 1.09. 整型变量a定义后赋初值的结果是 B 。

int a=2.8*6A.12 B. 16C. 17D. 1810.下列运算符中可用于是实数的是 B 。

A. %B. ――C. <<D. &11. 下列关于圆括号运算符的功能说法不正确的是 C 。

A.可用于强制类型转换 B. 可用于类型构造C. 可用于类型声明D. 可用于函数调用12. 设变量k为int型,下列选项中不正确的赋值表达式是 D 。

A.++k B. n1=n2=n3C. k=i==1D. a=b+c=113. 设int n=11,i=4;,则赋值运算执行后n的值是 D 。

A.0 B. 3C. 2D. 114. 设int b=12表达式b+=b-=b*b求值后b的值是 D 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.
主要目的是总结C/c++理一些常见的错误
希望相关方面有问题的朋友们可以先看看此贴,说不定对你有帮助,也可以省去一些重复问题.
/****所有代码都未加头文件,想运行请自行添加.*************************/
1:试图用cout输出全局类的析构.(可能是VC6的问题,如果你的编译器没出现问题,很好,
class CDemo
{
public:
CDemo(const char *str;
~CDemo(;
private:
char name[20];
};
CDemo::CDemo(const char* str
{
strcpy(name,str;
cout < <"cout:Construction called for " <
}
CDemo::~CDemo(
{
cout < <"cout:Destruction called for " <
printf(" printf:Destruction called for %s\n",name;
}
static CDemo GlobleObject("globeobject"; //这个是我们关注的,cout:Destruction called for globeobject并不会出现
void main(
{
CDemo LocalObjectInMain("localobjectinmain";
CDemo * pHeapObjectInMain=new CDemo("heapobjectinmain"; CDemo *pHeapObjectInFunc=new CDemo("heapobjectinfunc"; static CDemo StaticObject="staticobject";
}
这里globeobject的析构并没有被显示出来,为何呢?
加一句printf你就知道为何了.
因为cout析构在GlobleObject析构前.
2.关于VC6的问题:
VC6对于friend,模板等几个bug,建议换VS测试.
如,重载操作符号,如果friend符号的定义在类体外会报错.
模板嵌套:
vector > bad; //error,VC6 会把2维容器 >>认作输出符号. vector > good;
此外VC6下编译模板,出现一堆警告的话,你在头文件前加
#pragma warning(disable:4786
3.关于型参,实参不分,指针搞不清楚.
void Exchg1(int x, int y
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf("Exchg1:x=%d,y=%d\n",x,y;
}
void Exchg2(int &x, int &y
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf("Exchg2:x=%d,y=%d\n",x,y;
}
void Exchg3(int *x, int *y
{
int tmp;
tmp=*x;
*x=*y;
*y=tmp;
printf("Exchg3:x=%d,y=%d\n",*x,*y;
}
void main(
{
int a=4,b=6;
Exchg1 (a,b ;
printf("a=%d,b=%d\n",a,b;
Exchg2 (a,b;
printf("a=%d,b=%d\n",a,b;
Exchg3(&a,&b ;
printf("a=%d,b=%d\n",a,b;
}
4.C风格字符串与标准库类型string不分
int i;
char * ch = "cchars"; //这是C风格字符串,结尾有'\0'
char mch[] = "mchars";
string str(ch; //string类的构造函数接收ch,并作转化
i = strcmp(ch,str; //error,有人喜欢把string类作参数输入到strcmp等C字符串函数里,肯定会出问题啊.
ch[0] = 'd'; //error,char *ch获取的内存是const,相当于const char *ch= "cchars";无法修改.
mch[0] = 'f'; //ok
5.关于指针和内存申请及越界
int *ptr1,ptr2;
*ptr1=10; //error,ptr1未申请内存,未初始化,结果未定义,看似不容易出错,可很多人写链表就没有申请内存
ptr1 =(int * malloc (sizeof(int;
*ptr1=10; //ok;
*ptr2 = 20; /error
ptr2=ptr1;
*ptr2 = 20; //ok,实际是修改ptr1和ptr2指向的同一块区域.
ptr2= new int[10];
ptr2[10]=5; //error,这样写你或与觉得很傻,但是实际上很多时候,你就不知不觉犯了这些错误.
free( ptr1 ;
delete ptr2; //error,这样delete只会析构第一个元素
delete[] ptr2; //ok
6.关于字节对齐
struct st1
{
char p1; [0]
char p3; [1]
short p2; [2][3]
int p4; [4][5][6][7]
};
struct st2
{
char p1; [0]
short p2; [2][3] //占2字节,起始地址要是2个整数倍
char p3; [4]
int p4; [8][9][10][11] //4字节,起始地址是4的整数倍
};
为何sizeof(st1==8;sizeof(st2==12,2者不一样呢?看注释.
7.小于32字节数据的输出显示问题
8.关于IO流
scanf("a=%d,b=%d",&a,&b; //很多人喜欢这样写,然后输入 3 4 就问,为何程序跑起来不对,这里应该输入3,4
scanf("a=%db=%d",&a,&b; // 这样是3 4
输入缓冲区很容易出现一些你不需要,或者容易出问题的字符,
建议用空就刷新一下.
fflush(stdin;
9.关于变量作用域:其实也算指针应用的问题
引用的是rwjbjn1问的一个帖子 /u/20090302/17/900b3797-3642-4569-a623-dc0f8ebd8401.html?seed=1325371970
//代码1
int A(
{
int test=10;
return test;
}
int main(
{
int a=A(;
printf("%d\n",a;
return 0;
}
//代码2
char* A(
{
char p[]="hello world";
return p;
}
int main(
{
char *str=NULL;
str=A(;
printf("%s",str;
}
代码1没问题,可是代码2有问题(可以有结果,但是结果不一定对,这是未定义的操作.为何自己分析,可以去看那个贴里.
10.数据溢出
数据溢出,道理很简单,可是代码一长.有人不知不觉就犯错误了.
int main(
{
int b= 1294754725065626467; //32位机的int只支持32位(2^32-1的有效计数
char a=199; //8bit的char数据只支持0到127的有效计数
cout < < a <
cout < < b <
printf("%c",a;
printf("%c\n",a;
}
不要试图解释结果,溢出了,就没什么好解释的了.什么诡异事都有.。

相关文档
最新文档