2016.11.01 - 2016.11.07 笔记
来源:互联网 发布:什么数据库好用 编辑:程序博客网 时间:2024/04/28 12:26
例1:以下代码中的两个sizeof用法有问题吗?void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{ for ( size_t i = 0; i < sizeof(str) / sizeof(str[0]); ++i ) if ( 'a' <= str && str <= 'z' ) str -= ('a' - 'A' );}char str[] = "aBcDe";cout < < "str字符长度为: " < < sizeof(str) / sizeof(str[0]) < < endl;UpperCase( str );cout < < str < < endl;//函数内,外的都有问题
例2:int x[6][4],(*p)[4]; p=x; 则*(p+2)指向哪里?//x[2][0]下面程序的输出结果是#include<iosteam.h>void main(){ int n[][3] = {10,20,30,40,50,60}; int (*p)[3]; p=n; cout<<p[0][0]<<","<<*(p[0]+1)<<(*p)[2]<<endl;}//int (*p)[3];这里首先确定:p是一个指针,一个指向数组的指针。p = &(p[0]) p是二维指针p[0] = &(p[0][0]) p[0]是一维指针p[0] + 1表示在列上移动。 e.g: p[0] + 1 = &p[0][0] + 1 = &p[0][1]p + 1 表示在行上移动。 e.g: p + 1 = &(p[0]) + 1 = &p[1]因此:*(p[0]+1) = p[0][1] = 20(*p)[2] = p[0][2] = 30
给定程序中,函数fun的功能是:将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 试题程序:void fun (char *s, int a, double f){ /**********found**********/ 1 * fp; char ch; & fp = fopen("filel.txt", "w"); fprintf (fp, "% S % d %f\n", % '%', f); fclose(fp); fp = fopen("filel.txt", "r"); printf("\nThe result:\n\n"); ch = fgetc(fp); /**********found**********/ while (!feof ( 2 )) { /**********found**********/ putchar( 3 ); ch = fgetc(fp); putchar('\n'); } fclose(fp);}int main( ){ char a[10] = "hello!"; int b = 12345; double c = 98.76; fun(a, b, c);}1参考答案 FILE2参考答案 fp3参考答案 ch
//例4:在32位机器上,有如下代码:char array[] = "abcdefg";printf("%d\n", sizeof(array));char *p = "abcdefg";printf("%d\n", sizeof(p));void func(char p[10]) { printf("%d\n", sizeof(p)); }void func(char (& p)[10]) { printf("%d\n", sizeof(p)); }int main(void) { printf("%d\n", sizeof(char[2])); printf("%d\n", sizeof(char &)); return 0; }1 chararray[] ="abcdefg";printf("%d\n",sizeof(array)); 主要是考虑后面还有一个\0;2 char*p ="abcdefg";printf("%d\n",sizeof(p));p是一个指针。3 voidfunc(charp[10]){ printf("%d\n",sizeof(p));}主要考虑的是数组当做参数时退化为指针,故传入的p任然是原指针p的拷贝,也是一个指针4voidfunc(char(& p)[10]){ printf("%d\n",sizeof(p));}p是装10个char类型数据的数组的引用,其结果类似于char p[10];printf("%d\n",sizeof(p));5 printf("%d\n",sizeof(char[2]));printf("%d\n",sizeof(char&));//sizeof(char&): 对引用类型执行sizeof运算得到被引用对象所占空间的大小。【C++ Primer4.9】
例5:如下程序用于输出“Welcome to Huawei Test”,请指出其中的两处错误。char * GetWelcome(void){ char * pcWelcome; char * pcNewWelcome; pcWelcome="Welcome to Huawei Test"; pcNewWelcome=(char *)malloc(strlen(pcWelcome)); //1 if(NULL==pcNewWelcome){ return NULL; //2 } strcpy(pcNewWelcome, pcWelcome); //3 return pcNewWelcome; //4}1是错的 ,应该是strlen(pcWelcome)+13 由于 strlen(pcWelcome)+1改了之后 , pcNewWelcome所指的空间可以放下pcWelcome所指的内容了,也是对的4 pcNewWelcome指针是在函数内部定义的,在栈上分配的,函数调用结束后,会释放这个指针变量本身,但其所指向的内存仍然存在
例6:void swap_int(int *a,int *b){ *a=*a+*b; *b=*a-*b; *a=*a-*b;}以下说法正确的是:举个例子:交换-5, -7。 以4bit为例。-5 = 1011 (补码) -7 = 1001 (补码)(-5)+ (-7)= 10100=0100=4 (溢出后为4)4-(-7)= 4 +7=0100 + 0111 = 1011 = -5的补码4-(-5)= 4 + 5 = 0100 + 0101 = 1001 = -7的补码设整形变量*a、*b的位表示为*a = n31n30 ··· n0*b = m31m30 ··· m0只有当*a > 0 && *b > 0 或 *a < 0 && *b < 0时才会发生溢出。两者类似,只证明均大于0时的情况。必须扩展额外一位才能够容纳正确的结果,'|'左边为扩展位。*a = 0|0n30 ··· n0 = n30*230 + n29*229 + ··· + n0*20 = N*b = 0|0m30 ··· m0 = m30*230 + m29*229 + ··· + m0*20 = M若和溢出,则33位表示必为*a + *b = 0|1b30 ··· b0 = -231 + b30*230 + b29*229 + ··· + b0*20 = 2 31 + B ① 计算机将得到的33位结果truncate回原来的32位,即丢弃第33位(0)变为:*a + *b = 1b30 ··· b0 = -231 + b30*230 + b29*229 + ··· + b0*20 = -2 31 + B ②正确的真实值是①,溢出结果为②,可见溢出结果=真实值-2 32 则*b = *a - *b = ② - *b = ① - 232 - *b = *a + *b - 232 - *b = -232 + *a最后一步,来看 -232 + *a == *a 成立否?0 < *a < 231, 则 -232 < -232 + *a < -231,和仍需要扩展1位方能表示:*a = 0|0n30 ··· n0 = n30*230 + n29*229 + ··· + n0*20 = N-232 = 1|0000 ··· 00 和的位表示为-232 + *a = 1|0n30 ··· n0 = n30*230 + n29*229 + ··· + n0*20同样,计算机把33位结果truncate回32位(丢弃第33位)得到:-232 + *a = 0n30 ··· n0 = n30*230 + n29*229 + ··· + n0*20 = *a可见-232 + *a == *a 是成立的。因此尽管溢出了,但仍能正确交换。
0 0
- 2016.11.01 - 2016.11.07 笔记
- Python学习笔记--2016.11.07
- 2016.11.25笔记
- IO流笔记(2016.11.22)
- 学习笔记 07-01-04
- 笔记01
- 笔记01
- 场景识别学习笔记日记2016.11.24
- Python自学过程笔记-2016.11.4
- 数据结构第一章笔记(2016.11.26)
- 数据结构第二章笔记(2016.11.26)
- 场景识别学习笔记日记2016.11.28
- 黑马程序员 07 Servlet 学习笔记 01
- 2016-01-07 工作笔记7
- NxOgre 笔记07
- NxOgre 笔记07
- Java笔记—07
- 传智播客学习笔记07
- 研究谷歌和亚马逊的微服务案例,我们能学习到的经验
- 一天一条Linux指令-kill
- ListView去除header触摸时的阴影效果
- sscanf()提取数据的方法
- Python学习5_解决python 提示 SyntaxError: Missing parentheses in call to 'print'
- 2016.11.01 - 2016.11.07 笔记
- 【经验】Angularjs 中使用 layDate 日期控件
- C++继承中你不知道的事
- 重写和重载
- codevs 1060 搞笑世界杯
- codeforces377a
- 如何做好单元测试
- 几个Java封装好的类
- 一篇文章帮你梳理清楚API设计时需要考虑的几个关键点