2021-06-21指针与变量 和字符数组作业。

1.若下列程序的运行结果是6 3,fun函函数调用时的实参(题中?)应该为:

void fun(int  &a, int  &b){  //用的谁的引用,改变谁的值。
    int  k;
    k=a; a=b; b=k;
}
int main(){  
    int  a=3,b=6,*x=&a,*y=&b;
    fun(?;
    cout<<a<<" "<<b;//这里改变了ab的值,实参应该是ab.
}

A【正确答案: A】
A a,b
B &a,&b
C x,y
D *x,*y

//指针的引用就是用来改变指针的值(指针的指向)。

2.已知函数func 的原形是

double func(double *pd,int &ri);

变量x 和y 的定义是double x;int y;把x 和y 分别作为第一参数和第二参数来调用函数func,正确的调用语句是:
B【正确答案: B】
A func(x,&y);
B func(&x,y);
C func(&x,&y);
D func(x,y);

//引用的实参是本身,不是地址。

3.以下定义语句中正确的是:C【正确答案: C】
A char a='A’b=‘B’;
B float a=b=10.0; //不能连续赋。
C int a=10,*b=&a;
D float *a,b=&a;

4.以下程序段运行后,a的值是:

int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==p2;
cout<<a<<endl;

#include <iostream>

using namespace std;

int main() {

	int a,k=4,m=6,*p1=&k,*p2=&m;
	a=p1==p2;
	cout<<p1<<endl;            //0x6ffe08 p1的位置高。 
	cout<<p2<<endl;            //0x6ffe04 p2的位置低。
	 
	cout<<p1-p2<<endl;         //1        相差一个元素。 
	cout<<p2-p1<<endl;         //-1
	
	cout<<(p1==p2)<<endl;      //0
	cout<<(p1<p2)<<endl;       //0
	cout<<(p1>p2)<<endl;       //1
	//p1大于p2是真,而且真的大一。 
	
	cout<<a<<endl;             //0
    return 0;
}

D【正确答案: C】
A 4
B 1
C 0
D 运行时出错,a无定值

CD豪_Dwight的博客:
指针变量是有加减运算的,但是要注意以下几点:

  1.   指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x2000 0000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址。指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针变量p的值是0x20000000,那么p=p+2;的值并不是0x2000 0002,并不是地址值的简单相加减,那么地址值加减多少是与指针指向的数据类型相关联的:如果在64位的操作系统上,p是指向整型数据的指针变量,那么p=p+2之后,p的存储的地址值变成0x2000 0008;同理,如果在32位的操作系统上,p是指向整型数据的指针变量,那么p=p+2之后,p的存储的地址值变成0x20000008,也就说实际上地址值加了sizeof(int)*2这么多。说明白点,我们加减的数字是以指针指向的数据类型为量度的,p+2表示p在内存中前移两个int的距离,如果p不是int类型,而是其他类型道理也是一样。同样指针与整型数据相减也是同样的道理。
    
  2.   指针之间可以相减,但不可以相加:两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数),例如对于int类型的指针p和p1.p1-p的意义表示他们之间相隔多少个int类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。指针变量的自加和自减实际上是与整数1的加减运算。
    
  3.    指针之间可以比较大小。但是同样也限于两个相同类型的指针变量,不同类型的指针变量之间比较大小没有任何意义。指针之间的大小比较的意义,表示在内存中他们指向的位置的高低关系。
    

栈的地址是由高端地址向低端增长

5.下列程序段的输出结果是:
D【正确答案: D】

int *p, *q, k = 1, j=10 ; 

p = &j; 

q = &k ; 

p = q ;    

(*p)++;  //先取值,再自加,改变指针指向的元素的值。

cout<<j<<k<<endl;

A 111

B 101

C 112

D 102

6.下列程序段的输出结果是:

void fun(int  *x, int  *y{
    cout<<*x<<*y;
    *x=3; *y=4;
}
int  main(){  
    int  x=1,y=2;
    fun(&y,&x); //21
    cout<<x<<y<<endl;//43.
    return 0;
}

A【正确答案: A】
A 2 1 4 3
B 1 2 1 2
C 1 2 3 4
D 2 1 1 2

7.下列程序的运行结果是:

void fun(int  *a, int  *b){
    int  *k;
    k=a; a=b; b=k;    //改变不了。
}
int main(){  
    int  a=3,b=6,*x=&a,*y=&b;
    fun(x,y);
    cout<<a<<" "<<b;
}

B【正确答案: B】
A 6 3
B 3 6
C 编译出错
D 0 0

1.下面是对s的初始化,其中不正确的是:
D【正确答案: D】
A char s[5]={“abc”};
B char s[5]={‘a’,‘b’,‘c’};
C char s[5]="";
D char s[5]=“abcde”; //太长了。

2.已知: char str[]=“ab\n\012\”";则执行语句:cout<<strlen(str);的结果是:
C【正确答案: C】
A 3
B 4
C 6
D 12
//‘a’,‘b’,’\n’,’\012’,’\’,’"’.共六个。

3.调用strlen(”abcd\0ef\0g”)的返回值是:A【正确答案: A】
A 4
B 5
C 8
D 9
//strlen测字符串长度而不是在内存中的大小,从第一个字符开始,遇到’\0’结束,所以只测了’a’,‘b’,‘c’,'d’四个字符串的长度。

4.下面程序段的运行结果是:

char c[5]={'a','b','\0','c','\0'};
cout<<c<<endl;

B【正确答案: B】
A ‘a’‘b’
B ab //输出遇到’\0’结束。
C ab c
D ab▄(▄表示空格)

5.若有以下语句,则正确的描述是:

char x[]=12345;
char y[]={1,2,3,4,5};

A【正确答案: B】
A x数组和y数组的长度相同
B x数组长度大于y数组的长度 //数组x的字符串在内存中存储的时候,末尾会自动加’\0’,而数组y不会,所以是大于。
C x数组长度小于y数组的长度
D x数组等价于y数组

6.已知:char str1[20]=“abcde”,str2[20]=“xyz”;则执行语句: cout<<strlen(strcpy(str1,str2));输出结果是:B【正确答案: B】
A 9
B 3 //strlen()测字符串长度而不是内存大小。复制就是前面的内容没了。
C 5
D 8

7.有已排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。请选择填空。

char a[20] = "cehiknqtw";
char s[] = "fblaz";
int i, k, j;
for (k = 0; s[k] != '\0'; k++) {
 j = 0;
 while (a[j] != '\0' && s[k] >= a[j])
  j++;                               //一直加到s[k]<a[j]
 for (i = strlen(a); i >= j; i--) { //i是字符串的长度,a[i]表示字符串末尾的'\0';'\0'也要跟着向后移动,不能把'\0'的位置占了。
     ( 请填空 );
 }
 a[j] = s[k];                       //s[k]到a[j]的位置。则说明a[j]开始直到最后一个字符都往后移。
}
puts(a);

B【正确答案: B】
A a[i]=a[i+1]
B a[i+1]=a[i]
C a[i]=a[i-1]
D a[i-1]=a[i]

8.下列程序的执行结果是: 1225 【 正确答案: 12】

#include<iostream>

using namespace std;

int main() {

    char ch[] = { "12ye25ri" };

    int i, s = 0;

    for (i = 0; ch[i] >= '0' && ch[i] <= '9'; i++) //条件是ch[i] >= '0' && ch[i] <= '9',一旦不满足,循环就结束。跟这条件在while里不一样。

        s = 10 * s + ch[i] - '0';

    cout << s << endl ;

    return 0;

}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值