目录
1.设有定义: double array[10]; 表达式 sizeof(array)/sizeof(array[0])的结果是 array数组中元素个数。说法是否正确?
2.在以下程序段中,若从键盘输入:abc def↙,则输出结果是( )
4.用calloc函数创建具有10个整型元素的动态存储空间的正确调用是( )。
5.上下文及头文件均正常的情况下,以下程序的输出结果是________。
1.设有定义: double array[10]; 表达式 sizeof(array)/sizeof(array[0])的结果是 array数组中元素个数。说法是否正确?
答案:正确
解析:sizeof,用数组的大小除以单个元素的大小得到数组中元素的个数
2.在以下程序段中,若从键盘输入:abc def↙,则输出结果是( )
char *p, *q;
p = (char *)malloc(sizeof(char) * 20);
q = p;
scanf("%s %s", p, q);
printf("%s %s\n", p, q);
答案:def def
解析:p q 指向同样的地址, scanf(“%s %s”, p, q);”abc”赋值给p,然后”def”赋值给q(即p),把之前的赋值覆盖了。
3.对于 32 位机器,则下面代码输出结果为()
#include<iostream>
#include<string>
using namespace std;
typedef struct data_ {
int a[10];
} data_t;
typedef struct descriptor_ {
data_t* ptr;
char data[0];
} desc_t;
int main() {
cout << sizeof(desc_t) << endl;
return 0;
}
答案:4
解析:data[0]的长度为零,字节为零。在WIN32编译器下指针长度为4。总长度为4,不需要补齐。所以结构体长度为4
4.用calloc函数创建具有10个整型元素的动态存储空间的正确调用是( )。
答案:C
解析:calloc函数会给申请的空间置0初始化,而malloc不会
5.上下文及头文件均正常的情况下,以下程序的输出结果是________。
void fut(int**s,int p[2][3]) {
**s=p[1][1];
}
void main( ) {
int a[2][3]={1,3,5,7,9,11},*p;
p=(int*)malloc(sizeof(int));
fut(&p,a);
cout<< *p;
}
答案:9
解析:**s=a[1][1]; ————> *s=p; *(*s)=a[1][1]; 就是a[1][1]的值.
6. 下面函数的时间复杂度是
long foo(long x){
if(x < 2) return 1;
return x * x * foo(x - 1);
}
答案: A
解析:
可以配合自己画的流程图看
x=1 O(1)
x=2 O(1+O(foo(1)))=O(2)
x=3 O(1+O(foo(2)))=O(3)
。。。依次类推
x=N O(1+O(foo(N-1)))=N
7.运行下面这段C语言程序之后,输出在屏幕上的结果是:
#include<stdio.h>
void foobar(int a, int *b, int **c)
{
int *p = &a;
*p = 101;
*c = b;
b = p;
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int *p = &c;
foobar(a, &b, &p);
printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p);
return (0);
}
答案:A
解析:函数foobar中的a是按值传递,因此在函数中的修改不会引起主函数中的变化。
函数中b传递的是主函数中b的指针,语句b = p ,其中p指向的是函数foobar内局部变量a的地址,让传递过去的指针换了指向的数据,原来指向的数据(主函数中的b)不会有影响。如果这里是*b = *p那么主函数中的b也要相应变化。
函数中的c传递的是双重指针,*c = b,也就是让主函数中的p指针指向了主函数中的b的地址
在函数foobar中对指针的变化没有影响到主函数,只是让双重指针更换了指向而已