笔试题目整理解答

1.下面程序的输出结果为多少?

#include
#include
//测试sizeof函数
void Func(char str_arg[100]){

	printf("%d\n",sizeof(str_arg));
}

//主函数
int main(){

	char str[]="Hello";
	char s[]={'a','b','c','d'};
	printf("%d\n",sizeof(str));
	printf("%d\n",strlen(str));
	char *p=str;
	printf("%d\n",sizeof(p));
	Func(str);
	return 0;
}

解答:6,5,4,4。第一个是求数组的大小,不要忘了’\0’,第二个是求字符串长度,注意strlen返回的长度是不包括’\0’的,指针的sizeof都是4字节(32位系统)。函数中形参虽是数组的形式,但实际传入的是指针(数组首地址),所以后面[100]其实没有用,还是4字节。

运行测试:

笔试题目整理解答_第1张图片


2.typedef char *String_t; 和 #define String_d char * 这两句在使用上有什么区别?

   前者声明一个类型的别名,在编译时处理,有类型检查;后者是一个简单的替换,在预编译时处理,无类型检查。从使用上来说,String_t a,b; a和b都是char* 类型的,但String_d a,b; 只有a是char*类型的,b是char型的。


3.题目:已知rand7() 可以产生 1~7 的7个数(均匀概率),利用rand7()  产生rand10()   1~10(均匀概率)

   

int rand10()
{
int temp;
int temp2;
do 
{
temp = rand7();
} while (temp> 5);//temp 1到5
do 
{
temp2 = rand7();
while (temp2 >2);//temp2 1到2
return temp + (temp2 - 1) * 5;
}






























你可能感兴趣的:(学习笔记和感悟)