2-指针与引用练习题
c语言指针编程练习题
c语言指针编程练习题
2. 从命令行输入两个实型数据,请比较大小并输出。参考答案
3. 输入3个数a,b,c,按大小顺序输出。利用指针方法参考答案
4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。参考答案
5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案
6. 有n个人围成一圈,顺序排号。从第一个人开始报数,凡报到3的人
退出圈子,问最后留下的是原来第几号的那位。参考答案
7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。参考答案
8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调
用函数1/1+1/3+…+1/n 参考答案
9. 八进制转换为十进制参考答案
10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之
和以及所有偶数之和。形参n给了数组中数据的个数:
利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。参考答案
11. 复制字符串。参考答案
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #include
void swap
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
void main
{
int a,b,c,temp;
scanf;
if
swap;
if
swap;
if
swap;
printf;
指针练习题
编程题
1用指向数组的指针变量输出数组的全部元素
2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出
练习题:
一判断题
1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
2.指针的类型是它所指向的变量或对象的类型。
3.定义指针时不可以赋初值。
4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。
5.指针可以加上或减去一个int型数,也可以加上一个指针。
6.两个指针在任何情况下相减都是有意义的。
7.数组元素可以用下标表示,也可以用指针表示。
8.指向数组元素的指针只可指向数组的首元素。
9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。
10.引用是一种变量,它也有值和地址值。
11.引用是某个变量的别名,引用是被绑定在被引用的变量上。
12.创建引用时要用一个同类型的变量进行初始化。
13.指针是变量,它可以有引用,而引用不能有引用。
二单选题
1.下列关于定义一个指向double型变量的指针,正确的是()。
A.int a(5);double *pd=a;B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d;
2.下列关于创建一个int型变量的引用,正确的是()。
A.int a(3),&ra=a;B.int a(3),&ra=&a;
C.double d(3.1);int &rd=d;D.int a(3),ra=a;
3.下列关于指针概念的描述中,错误的是()。
c++指针类练习题及答案
1、利用指针,编写用于交换两个整型变量值的函数。程序运行结果如下:输入:5 6
输出:6 5
#include <iostream>
using namespace std;
void swap(int *xp,int *yp)
{
int tmp;
tmp=*xp;
*xp=*yp;
*yp=tmp;
}
int main()
{
int a,b;
cin>>a>>b;
swap(&a,&b);
cout<<a<<" "<<b<<endl;
return 0;
}
2、编写主程序,将输入字符串反序输出。程序运行结果如下:
输入:ABCDEFGHIJK
输出:KJIHGFEDCBA
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char str[100];
cin>>str;
int len;
len=strlen(str);
char *p=&str[len-1];
while(p>=str)
{
cout<<*p;
p--;
}
cout<<endl;
return 0;
}
3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。
程序的运行结果如下所示:
输入(第一个数是序列的长度):
6
2 7 2 2
3 1
输出:
1 2 2 2 3 7
#include <iostream>
using namespace std;
c++指针类练习题及答案
c++指针类练习题及答案
1、利用指针,编写用于交换两个整型变量值的函数。程序运行结果如下:输入:5 6
输出:6 5
#include
using namespace std;
void swap(int *xp,int *yp)
{
int tmp;
tmp=*xp;
*xp=*yp;
*yp=tmp;
}
int main()
{
int a,b;
cin>>a>>b;
swap(&a,&b);
cout<<a<<" "<<b<<endl;<="" bdsfid="81" p=""></a<<"> return 0;
}
2、编写主程序,将输入字符串反序输出。程序运行结果如下:
输入:ABCDEFGHIJK
输出:KJIHGFEDCBA
#include
#include
using namespace std;
int main()
{
char str[100];
cin>>str;
int len;
len=strlen(str);
char *p=&str[len-1];
while(p>=str)
{
cout<<*p;
p--;
}
cout<<endl;< bdsfid="105" p=""></endl;<>
return 0;
}
3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。
程序的运行结果如下所示:
输入(第一个数是序列的长度):
指针练习题与答案
编程题
1用指向数组的指针变量输出数组的全部元素
#include
void main( )
{ int a[10], i;
int *p;
for (i=0; i<10; i++)
cin>>a[i];
for (p=a; p
cout<<*p<<‘\t’;
}
#include
void main( )
{ int a[10], i;
int *p=a;
for (i=0; i<10; i++)
cin>>a[i];
for (i=0; i<10; i++)
cout<<*p++<<‘\t’;
}
2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出
#include
void inv(int *x, int n);
void main( )
{ int i, a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for (i=0;i<10; i++)
cout<
}
void inv(int *x, int n)
{ int *p, t, *i, *j, m=(n-1)/2;
i=x; j=x+n-1; p=x+m;
for (; i<=p; i++,j--)
{ t=*i; *i=*j; *j=t;
}
}
void inv(int x[ ], int n)
{ int t, i, j, m=(n-1)/2;
for (i=0;i<=m; i++)
{ j=n-1-i;
t=x[i]; x[i]=x[j]; x[j]=t;
}
}
一判断题
× 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
指针练习题
指针练习题
第10章指针练习题
选择题填空题编程题
一、选择题:
1、若有定义:int x,*pb; 则以下正确的赋值表达式是()
A、pb=&x
B、pb=x
C、*pb=&x
D、*pb=*x
2、以下程序的输出结果是()
A、5,2,3
B、-5,-12,-7
C、-5,-12,-17
D、5,-2,-7
#include "Stdio.h"
#include "Conio.h"
void sub(int x,int y,int *z)
{ *z=y-x; }
int main()
{
int a,b,c;
sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);
printf("%d,%d,%d\n",a,b,c);
getch();
return 0;
}
4、以下程序的输出结果是()
A、4
B、6
D、10
#include "Stdio.h"
#include "Conio.h"
int main()
{
int k=2,m=4,n=6;
int *pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf("%d\n",n);
getch();
return 0;
}
5、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()
A、20
B、30
C、21
D、31
6、已知指针p的指向如5题中图所示,则表达式*++p的值是()
A、20
B、30
C、21
D、31
7、已知指针p的指向如5题中图所示,则表达式++*p的值是()
A、20
B、30
D、31
8、以下程序的输出结果是()
A、23
B、24
C、25
D、26
c 指针练习题
c 指针练习题
C指针练习题
C语言中的指针是一种强大而又复杂的概念。它允许我们直接访问内存中的数据,并对其进行操作。然而,由于指针的灵活性和复杂性,很多初学者在使用
指针时会遇到困惑和错误。为了帮助大家更好地理解和应用指针,下面将给出
一些C指针的练习题。
1. 交换两个变量的值
这是一个经典的C指针练习题。请编写一个函数,接受两个整数指针作为参数,并交换这两个指针所指向的变量的值。例如,如果输入为a=3,b=5,调用函
数后,a=5,b=3。
2. 求字符串的长度
请编写一个函数,接受一个字符串指针作为参数,并返回该字符串的长度。注意,字符串的长度是指字符串中字符的个数,不包括字符串结尾的空字符'\0'。3. 查找数组中的最大值
请编写一个函数,接受一个整型数组指针和数组的长度作为参数,并返回数组
中的最大值。提示:可以使用指针来遍历数组,并使用一个变量来保存当前的
最大值。
4. 字符串拷贝
请编写一个函数,接受两个字符指针作为参数,并将第一个字符串拷贝到第二
个字符串中。注意,第二个字符串必须具有足够的空间来存储第一个字符串的
内容。
5. 动态分配内存
请编写一个函数,接受一个整数作为参数,并动态分配一个大小为该整数的整型数组。然后,将数组的每个元素初始化为其下标的平方,并返回指向该数组的指针。注意,使用完数组后,必须释放动态分配的内存。
6. 字符串反转
请编写一个函数,接受一个字符串指针作为参数,并将该字符串反转。例如,如果输入为"hello",则函数应该将其改为"olleh"。
7. 指针数组排序
请编写一个函数,接受一个字符串指针数组和数组的长度作为参数,并按照字母顺序对字符串进行排序。提示:可以使用字符串比较函数strcmp来比较两个字符串的大小,并使用指针来交换字符串的位置。
C语言指针练习+答案+讲解.
第七章指针
7.1 选择题
1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;
a是整型数,
int *p,*q定义了指针,
p,q是指向整型的指针。
p取得a的地址,而q取得p的地址
p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。
A)把q的地址赋给p,则p和q完全一样了,都指向一个数2
B)把q中数据个p
C)把q中数据给a
D)a中数据是2,不能够给一个地址。除非*q=a
2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511
int a=511,*b=&a;
a 是整形变量
b 是整形指针变量,指向 a
printf("%d\n",*b);就是输出指针变量 b,
所指变量的值输出结果511
3.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);
47、已知在程序中定义了如下的语句:
int *P1,*P2;
int k;
p1=&k;p2=&k;
则下列语句中不能正确执行是( B )
A、k=*P1+*P2;
B、p2=k;
C、P1=P2;
D、K=*P1 * (*P2);
P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?
A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)
指针练习题及答案
六、指针习题及答案
一、单项选择题
1. *p最终值是( D)
int *p,b=10;static int a[]={2,3,4,1,5,6};
p=a;p+=3;a[3]=b;
A. 1
B. 3
C. 4
D. 10
2. *p最终值是( A )
char b[10]= "abcdefghi",*p;
p=b+5;
A. ’f’
B. ’g’
C. ’h’
D. ’e’
3. 有一个二维数组a[3][4],其2行3列元素a[2][3]的正确表示方法为( D )。
A. &a[2][3]
B. a[2]+3
C. *(a+2)+3
D. *(a[2]+3)
4. 指向一个包含4个整型元素的一维数组的行指针变量的定义形式为( D )。
A. int (*p)[]
B. int *p[4]
C. int *(p[])
D. int (*p)[4]
5. 4个指向int型元素的指针构成一个一维指针数组的定义形式为( B )。
A. int (*p)[]
B. int *p[4]
C. int *(p[])
D. int (*p)[4]
6. 若char *str1="china",char *str2="student";
则语句strcpy(str2,str1)执行后,str2的值为( A )。
A. china
B. student
C. studentchina
D. chinastudent
7.若有以下定义和语句:
int a[]={1,2,3,4,5,6,7,8,9,0}, *p=a;
则值为3的表达式是( B )。
A. p+=2,*(++p)
B.p+=2,*p++
函数指针练习题
函数指针练习题
函数指针是一种特殊的指针类型,它指向可以被调用的函数。函数
指针可以用于实现代码的动态调用、跳转以及回调函数等功能。本文
将通过几个练习题,帮助读者更好地理解函数指针的用法和实际应用。
练习一:使用函数指针实现两个整数的加法
```c
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*func)(int, int);
int a = 10, b = 20;
func = add;
int result = func(a, b);
printf("%d + %d = %d\n", a, b, result);
return 0;
}
```
在这个例子中,我们定义了一个函数指针`func`,它指向了一个名为`add`的函数。通过将函数指针赋值为`add`,我们可以使用函数指针调用`add`函数进行加法运算。
练习二:使用函数指针作为回调函数
```c
#include <stdio.h>
typedef int (*CallbackFunc)(int);
int square(int x) {
return x * x;
}
void applyCallback(CallbackFunc callback, int x) {
int result = callback(x);
printf("Result: %d\n", result);
}
int main() {
CallbackFunc func = square;
指针经典练习题(含答案版)二
C)-5,-12,-17
D)5,-2,-7
6.以下程序的结果是(C )
#include<stdio.h>
maቤተ መጻሕፍቲ ባይዱn()
{int k=2,m=4,n=6;
int *pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf(“%d”,n);}
A)4 B)6 C)8 D)10
7.若指针 p 已正确定义,其指向如图所示,则执行语
17.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读
入 3 个整数分别赋给变量 a,b,c 的语句是( A )
A)scanf(“%d%d%d”,&a,&b,d);
B)scanf(“%d%d%d”,&a,&b,&d);
C)scanf(“%d%d%d”,a,b,c);
D)scanf(“%d%d%d”,a,b,*d);
int b=2;
int func( int *a)
{ b+=*a;return(b);}
main( )
{ int a=2,res=2;
res+=func(&a);
printf( “%d”,res);}.
A)4 B)6 C)8 D)10
指针练习题与答案
编程题
1用指向数组的指针变量输出数组的全部元素
#include
void main( )
{ int a[10], i;
int *p;
for (i=0; i<10; i++)
cin>>a[i];
for (p=a; p
cout<<*p<<‘\t’;
}
#include
void main( )
{ int a[10], i;
int *p=a;
for (i=0; i<10; i++)
cin>>a[i];
for (i=0; i<10; i++)
cout<<*p++<<‘\t’;
}
2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出
#include
void inv(int *x, int n);
void main( )
{ int i, a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for (i=0;i<10; i++)
cout<
}
void inv(int *x, int n)
{ int *p, t, *i, *j, m=(n-1)/2;
i=x; j=x+n-1; p=x+m;
for (; i<=p; i++,j--)
{ t=*i; *i=*j; *j=t;
}
}
void inv(int x[ ], int n)
{ int t, i, j, m=(n-1)/2;
for (i=0;i<=m; i++)
{ j=n-1-i;
t=x[i]; x[i]=x[j]; x[j]=t;
}
}
一判断题
×1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
指针经典练习题及答案
二、程序题
1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现,
参数为指向字符串和要查找的子串的指针,返回次数。
2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),
Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。
例如,China转换成密文为G l m r e。
要求:在函数change中完成字母转换,在函数insert中完成增加空格,
用指针传递参数。
3、字符替换。要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),
并返回替换字符的个数。
4、编写一个程序,输入星期,输出该星期的英文名。用指针数组处理。
5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,
再分别取出每个字符串的第三个字母合并成一个新的字符串输出
(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。
6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,
然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,
输它们相同的数字个数(使用动态内存分配)。
/*1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。*/
#include<stdio.h>
int subString(char *a, char *b)
C语言指针习题及答案 (2)
A)*((*p+1)[2]) B)(*p+1)+2
C)*(*(p+5)) D)*(*(p+1)+2)
40.若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则language[2]的值是B。
35.下面程序段的输出是C。
int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;
for (k=01;k<4; k++) q[k]=&a[k*3];
printf(“%d\n”,q[3][0]);
A)8 B)16 C)20 D)输出不合法
36.若要对a进行自增运算,则a应具有下面说明D。
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
19.若已定义char s[10];则在下面表达式中不表示s[1]的地址是B。
A)s+1 B)s++ C)&s[0]+1 D)&s[1]
20.若有定义:int a[5],*p=a;则对a数组元素的正确引用是D。
C语言程序设计练习题之 指针与引用
int t;
t=x; x=y; y=t;
}
void fun2(int *x, int *y)
{
int *t;
t=x; x=y; y=t;
}
3.#include <iostream>
using namespace std;
int palindrome(char s[]);
int main()
{
char c[]="LEVEL";
if( !(*(s+i)>='0'&&*(s+i)<='9'))
s[n++]=s[i];
s[n]='\0';
}
6.#include <iostream>
using namespace std;
void f (char *str, char del );
int main()
{
char str[]="33123333435";
A.p=&a;B.*p=a;C.*(a+1)=a;D.p=a+1
14.以下语句或语句组中,能正确进行字符串赋值的是
A.char *sp;*sp="right!";B.char s[10];s="right!";
指针练习题及答案
指针练习题及答案
1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c
#include<stdio.h>
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
int main(){
int num1 = 10, num2 = 20;
printf("交换前的值:num1=%d, num2=%d\n", num1, num2);
swap(&num1, &num2);
printf("交换后的值:num1=%d, num2=%d\n", num1, num2);
return 0;
}
```
2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c
#include<stdio.h>
int countChar(const char *str, char target){
int count = 0;
while(*str != '\0'){
if(*str == target)
count++;
str++;
}
return count;
}
int main(){
char str[] = "hello world";
char target = 'l';
int count = countChar(str, target);
printf("字符 %c 出现的次数为:%d\n", target, count); return 0;
}
```
3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。```c
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运行结果为: 12 6
C++程序设计课件
设计制作:徐龙琴
15
7 阅读程序,给出运行结果。 #include<iostream.h> void main() { int i,a[10]; int *p1,*p2; p1=a; p1=&a[0]; p2=p1+5; for (i=0;i<=9;i++) {a[i]=i*i; p1= 0x0065FDCC,p2= 0x0065FDED p1= 0x0065FDCC,p2= 0x0065FDED cout<<"a["<<i<<"]="<<a[i]<<endl;} p2-p1=5 p2-p1=5 *p1-*p2=25 25 a[5]-a[0]= cout<<"*a="<<*a <<endl; cout<<"a="<<a<<endl; cout<<"p1="<<p1<<",p2="<<p2<<endl; cout<<"p2-p1="<<p2-p1<<endl; cout<<"*p2-*p1="<<*p2-*p1<<endl; cout<<"a[5]-a[0]="<< a[5]-a[0] <<endl; }
B)相加 D)赋值
运算是没有意义的。
13、已知指针p的指向下图所示,则表达式*--p的值是: 20
a[0]在低地址,a[1]在高地址
C++程序设计课件
设计制作:徐龙琴
5
二 下列程序有无错误: 1、 #include <iostream.h> int fun1(int); int fun2(int); void main() { int i=12; int (*fp)(); int (*fp)(int); fp = fun1; cout<<"Fun1:"<<(*fp)(i)<<endl; fp = fun2; cout<<"Fun2:"<<(*fp)(i)<<endl;} int fun1(int k) { k = k*2+1; return k;} int fun2(int m) { m = m/2+1; return m;}
C++程序设计课件 设计制作:徐龙琴 16
改后的运行结果为: 运行结果为: a[0]=0 a[0]=0 a[1]=1 a[1]=1 a[2]=4 a[2]=4 a[3]=9 a[3]=9 a[4]=16 a[4]=16 a[5]=25 a[5]=25 a[6]=36 a[6]=36 a[7]=49 a[7]=49 a[8]=64 a[8]=64 a[9]=81 a[9]=81 *a=0 a=0x0065FDCC
b.p+=5;*p++ ;
d.p+=4;++*p;
C++程序设计课件
设计制作:徐龙琴
2
6、若0<=k<6,则正确表示数组元素地址的语句是: C
int x[]={1,9,10,7,32,4},*ptr=x,k=1; a.x++ c.&ptr[k] a.i=*p; c.i=&j b.*p=*&j; d.i=**p; b.&ptr d.&(x+1)
四 编程题:
1、写一个函数,求一个字符串的长度,在main函数中输入字符 串,并输出其长度。 2、编程实现:从键盘输入一任意字符串,然后,输入所要查找 字符。存在则返回它第一次在字符串中出现的位置;否则,输 出“在字符串中查找不到!” 。并实现对同一字符串,能连续 输入所要查找的字符 3、编程实现:从字符串中删除子字符串。从键盘输入一字符串, 然后,输入要删除的子字符串。最后输出删除子串后的新字 符串。 4、用指针数组实现:输入月份的阿拉伯数字1~12,输出对应 的月份英文名称。 5、.编程实现:输入5个字符,从中找出最大的字符并输出。要 求用字符数组存放这5个字符,用指针数组元素分别指向这5 个字符,再用一个二级指针变量指向这个指针数组。 17 C++程序设计课件 设计制作:徐龙琴
C++程序设计课件
运行结果为: 123 321 321
设计制作:徐龙琴
12
4
#include<iostream.h> void ast(int x,int y,int *cp,int *dp) { *cp=x*y; *dp=x%y; } void main() { int a,b,c,d; a=2; b=3; ast(a,b,&c,&d); cout<<c<<d<<endl; }
C++程序设计课件 设计制作:徐龙琴
9
三 读程题:
1. #include<stdio.h>
vຫໍສະໝຸດ Baiduid main()
{ int *v,b;
v=&b; b=100; *v+=b; printf("%d\n",b); } 运行结果为: 200
C++程序设计课件
设计制作:徐龙琴
10
⒉ #include <stdio.h> void main( ) { int a[ ]={1,2,3,4,5}; int x, y, *p;
9、设有以下函数定义,则该函数返回的值是 a int * fun(int a) {int *t,n; n=a;t=&n; return t;} a.一个不可用的存储单元地址值 b.一个可用的存储单元地址值 c.n中的值 d.形参a中的值 10、下面函数的功能是: a int fun(char *x) {char *y=x; while(*y++){}; return y-x-1;} a. 求字符串的长度 b. 求字符串存放位置 c. 比较两个字符串的大小 d. 将字符串x连接到字符串y后面
C++程序设计课件
运行结果为: 62
设计制作:徐龙琴
13
5
#include <stdio.h> void main( ) { int a=10,b=0,*pa, *pb; pa=&a; pb=&b; printf("%d,%d\n",a,b); printf("%d,%d\n",*pa,*pb); a=20; b=30; *pa=a++; *pb=b++; printf("%d,%d\n",a,b); printf("%d,%d\n",*pa,*pb); (*pa)++; (*pb)++; printf("%d,%d\n",a,b); printf("%d,%d\n",*pa,*pb); }
C++程序设计课件
运行结果为: 10,0 10,0 21,31 21,31 22,32 22,32
14
设计制作:徐龙琴
6
#include <iostream.h> void main() { int a[2][3]={1,2,3,4,5,6}; int i,j,(*p)[3]; p=a; cout<<"input i,j:"; cin>>i>>j; cout<<"a["<<i<<","<<j<<"]= " <<*(*(p+i)+j)<<endl; }
//p 为指针数组
int (*p)[n]; //p 为指向数组的指针变量 int *p( );
//p 为返回指针型的函数
int (*p) ( ); //p 为函数指针
int **p;
//p 为指向指针的指针变量
C++程序设计课件
设计制作:徐龙琴
8
4 指出下列程序的错误。 #include <iostream.h> void exchange(int,int); void exchange(int*,int*); exchange(int&,int&); void main() void main() {cout<<"Input two data seprated by space:"; {cout<<"Input two data seprated by space:"; int a,b; int a,b; int a,b,*p1=&a,*p2=&b; cin>>a>>b; cout<<"Before Exchange:a="<<a cin>>a>>b; cin>>a>>b; <<",b="<<b<<endl; cout<<"Before Exchange:a="<<a<<",b="<<b<<endl; cout<<"Before Exchange:a="<<a<<",b="<<b<<endl; exchange(a,b); exchange(a,b); exchange(p1,p2); cout<<"After Exchange:a= "<<a cout<<"After Exchange:a="<<a<<",b="<<b<<endl; cout<<"After Exchange:a="<<a<<",b="<<b<<endl; <<",b="<<b<<endl; }} void exchange(int x,int y)&y) &x,int *x,int *y) { int t; {int t;t; { int t=x;x=y;y=t; t=x;x=y;y=t; t=*x;*x=*y;*y=t; } } }
a
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d", *(p+2)); } a. 3 b. 4 c. 1 d. 2
设计制作:徐龙琴 1
C++程序设计课件
3、若0<i<10,则对数组元素地址的正确表示是: d int a[]={1,2,3,4,5,6,7,8,9,0},*p,i; p=a; a.&(a+1) c.*p b.a++ d.&p[i]
一、选择题:
int a[]={1,2,3,4,5,6,7,8,9,0},*p,i; p=a; a.*(a+i) c.p+i b.a[p-a] d.*(&a[i])
1 若有以下说明和语句,且0<i<10,则 c 是数组元素的错误引用。
2 下面程序的输出是:
#include <stdio.h> void main( )
设计制作:徐龙琴
C++程序设计课件
4
11、用new为int数组分配10个存储空间,下面哪个语句正确 B A) int *p=new; C) int *p=new int[]; A)相减 C)比较 B) int *p=new int[10]; D) int *p=new int;
12、指向同一个数组的两个指针,作 B
7、若有说明:int i,j=7,*p;p=&i;则与i=j等价的语句是 B
8、设p1和p2是指向同一个int型一维数组的指针变量,k为int型变
量,则不能正确执行的语句是 B
a.k=*p1+*p2; c.p1=p2; b.p2=k; d.k=*p1*(*p2);
C++程序设计课件
设计制作:徐龙琴
3
p=&a[0];
x=*(p+2); y=*(p+4); printf("*p=%d,x=%d,y=%d\n",*p,x,y); return; } 运行结果为: *p=1,x=3,y=5
C++程序设计课件
设计制作:徐龙琴
11
3
#include<iostream.h> void callbyval(int a,int b,int c) {a=3;b=2;c=1;} void callbypointer(int* a,int* b,int* c) {*a=3;*b=2;*c=1;} void callbyreference(int& a,int& b,int& c) { a=1;b=2;c=3;} void main() { int a=1,b=2,c=3; int& a1=a; int& b1=a; int& c1=a; callbyval(a,b,c); cout<<a<<b<<c<<endl; callbypointer(&a,&b,&c); cout<<a<<b<<c<<endl; callbyreference(a1,b1,c1); cout<<a<<b<<c<<endl;}
4、已知:int a,x=1;则下面正确的赋值语句是: c
a. a=(a[1]+a[2])/2;
c. a=x+2;
b. a=(a[1]+a[2])/2;
d. a="good";
5、若:int a[]={1,2,3,4,5,6},*p=a;执行下面语句p指向5的是:a
a.p+=3;*(p++);
c.p+=4;*++p;
C++程序设计课件 设计制作:徐龙琴 6
2、 #include <iostream.h> void main() { int i, *p;
i = 10;
p*p &i; = = i; cout<<*p; }
C++程序设计课件
设计制作:徐龙琴
7
3、分别指出下面的p各是什么。
int *p; int *p[n]; //p 为指针变量