随笔分类 - C/C++那些事儿
摘要:先看如下一段左移右移的代码及其结果:代码结果为:结果左移操作()规则:右边空出的位用0填补高位左移溢出则舍弃该高位。计算机中常用补码表示数据:数据 127,补码和原码一样:0111 1111。左移一位: 1111 1110 - 这个补码对应的原码为:1000 0010 对应十进制:-2左移二位: 1111 1100 - 这个补码对应的原码为:1000 0100 对应十进制:-4左移三位: 1111 1000 - 这个补码对应的原码为:1000 1000 对应十进制:-8左移四位: 1111 0000 - 这个补码对应的原码为:1001 0000 对应十进制:-16左移五位:
阅读全文
摘要:UpperToLower方式一:char *p = "AGSDFEERER "; //error,因为p指向的是存储在静态存储区中的字符串,不能修改,企图修改就会发生Access Violation的错误。方式二:char p[] ="AGSDFEERER "; //OK,此时字符串存储在栈中,可以修改。方式三:char* p =(char*) malloc(sizeof("AGSDFEERER")); strcpy(p,"AGSDFEERER");//OK,此时将字符串存储到新申请的一个堆里面,可以进行修改。
阅读全文
摘要:今天在编写程序时遇上了这个问题,记录如下。一个二叉排序树的搜索算法:最初代码结果在运行是出现了访问的错误。分析:传入的参数虽是指针类型,但在函数内部改变了这个指针的值。这便和基本类型的变量作为参数传递给函数时类似,只是一个传值的过程,在函数过程中对该变量的修改不会被保存。按传址方式(指向指针的指针)修改后运行正常:指向指针的指针作为参数稍作总结,在指针做参数传递给函数的时候:只能保留指针指向的对象改变的值。不能保留指针本身所做得修改。在需要修改指针本身的时候,需使用指向指针的指针作为参数。也便是传值与传址的差别所在。
阅读全文

浙公网安备 33010602011771号