一、程序设计基本概念
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.二维的数组指针