程序员面试宝典 第五版——学习记录

版权声明:共同提高:) https://blog.csdn.net/u011436427/article/details/81974872

一、程序设计基本概念

1.

2.

如果取!已经跳出循环了,还会执行后面的++ 

3.

4.

可以参考:https://blog.csdn.net/cnd2449294059/article/details/73913504

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main()
{
	     unsigned int a = 0xFFFF12F7;
	     unsigned char i = (unsigned char)a;
	     char* b = (char*)&a;
		 printf("%08x\n", i);
	     printf("%x, %08x\n", i, *b);
		 b++;
		 printf("%04x\n", *b);
		 system("pause");
}

首先,需要说明的是:

unsigned char是1个字节,unsigned int是4个字节(32位的)

08表示输出8个字符,不够的用0补齐,eg:11111111,这个是8个字符

i  输出没啥问题,uint赋值给uchar的时候发生截断,只取了一个字节

char* b = (char*)&a;  

这里是将b指到跟a一样的位置,但是是char类型的指针(char *)。printf的时候会自动提升长度char类型的提升到4个字节如果是float会提升到8个字节

由于是char类型,而不是unsigned char,这个数据是有符号的,并且是一个负数负数并且是4个字节,那就是0xFFFFFFF7.打印的时候不管是%08x还是%x或者是%02x,都是输出的这个是数,因为有规则,如果%后面的数字比较小,仍然按照数据本身的长度。

但是如果是正数,例如后面我把b++操作,是一个正数,那么真实长度就只有2,%后面的数字就能起作用了。

5

.

6。

7.

更好的解释是:https://blog.csdn.net/zhongjiekangping/article/details/6855864

8.

9.

采用内存交换

10。

11.

12.

编程练习

int callsore(int *score,int *judge,int n)
{
    double sum1=0,sum2=0,m;
    int n1=0,n2=0;
    if(score && judge &&n)//这句话判断输入的数据的有效性
    {
        for(int i=0;i<n;i++)
            if(judge[i]==1)
                sum1=sum1+score[i];
                n1++;
            else if(judge[i]==2)
                sum2=sum2+score[i];
                n2++;
            else
                printf("error");
    }
    sum1=int(sum1/n1);
    sum2=int(sum2/n2);
    m=sum1*0.6+sum2*0.4;
    return m;

}

二、预处理、const、与sizeof

1.很经典的宏操作

#define min(a,b) (a<b?a:b)

2.


3.涉及到C++多重继承以及虚继承

三、指针与引用

指针是C++提供的一种颇具特色的数据类型,允许直接获取和操纵数据地址,实现动态存储分配

一个数据对象内存地址称为该数据对象的指针

1.

2.尤其是swap1,感觉会常犯错

2.

3.

而为啥这样改的原因是?(很关键的解释,看懂的话,懂得会很多)

4.比较特别的一道题目

5.上面的和下面的这道一起看,会比较好

6.指针数组

7.二维的数组指针

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/81974872