C与C++语言基础知识

在QT内的一些数组的计算:

    char a[]={"abcdd"};
    qDebug() << "strlen(a): "<< strlen(a) ;//5
    qDebug() << "sizeof(a): "<< sizeof(a) ;//6

    char b[10]={0};
    b[0]=0;
    b[1]=1;
    b[2]=2;
    b[3]=3;
    b[4]=4;
    qDebug() << "strlen(b): "<< strlen(b) ;//0  计算不了数值数组长度
    qDebug() << "sizeof(b): "<< sizeof(b) ;//10

    int c[]={1,2,3,4,5};
    qDebug() << "sizeof(int): "<< sizeof(int) ;//4
    qDebug() << "sizeof(c): "<< sizeof(c) ;//20
    qDebug() << "sizeof(a)/sizeof(int): "<< sizeof(c)/sizeof(int) ;//20/4=5个数组成员 利用这种方法来计算

但是对于一些浮动数组,难以计算,尚未找到解决方法:

    char d[100]={0};
    d[0]=0;
    d[1]=1;
    d[2]=2;
    d[3]=3;
    d[4]=4;
    d[5]=0;
    d[6]=1;
    d[7]=2;
    d[8]=3;
    d[9]=4;
    qDebug() << "sizeof(d): "<< sizeof(d) ;//100
    qDebug() << "strlen(d): "<< strlen(d) ;//0
    char d[]={0};
    d[0]=0;
    d[1]=1;
    d[2]=2;
    d[3]=3;
    d[4]=4;
    d[5]=0;
    d[6]=1;
    d[7]=2;
    d[8]=3;
    d[9]=4;
    qDebug() << "sizeof(d): "<< sizeof(d) ;//1——char的大小
    qDebug() << "strlen(d): "<< strlen(d) ;//0——strlen计算的是字符串的大小
    qDebug() << "sizeof(d)/sizeof(int): "<< sizeof(d)/sizeof(char) ;

 数组归零算法:

//数组归零算法:
    int i = 0, start = 0;
    data[10]={0};
    for (i = 0; i < 10; i++)
    {
        data[start++] = 2;
        start = start % 10;//当start++到10时,来到这条语句,10%10又变回了0
    }

 判断数组地址是否结束:

	unsigned char arr1[100] = {'a','b'};
	unsigned char arr2[10];
	int m = 0;
	for (int i = 0; i < 10;i++)
	{	
		arr2[i] = arr1[m];
        //当m为2时,就能进入该if内,但如果数组为[]不确定数组时,则该数组没有'\0'结束符
		if (arr1[m] == '\0')
		{
			m = 0;
		}
		m++;
	}

 小端序与大端序:

对于一个小端序的数据,接收后进行这样的算法即可换算过来
小端序数据->(arr[16]) + (arr[17]) * 256->大端序数据

外设内设: 

Flash(常说得eeprom就是flash的一种):

 DMA(分担CPU数据运输):

C51单片机寄存器的使用处理:

 C51单片机命名:

STC8A8K64D4是STC8系列中A子系列8K字节SRAM,64字节片内flash,D4表示带DMA并有4个串口外设UART

  C/C++细节操作:

 位运算:

//将第7位置0,不影响其他位—— 
P0&=~(1<<7); //P0.7=0
//将第7位置1,不影响其他位—— 
P0|=(1<<7); 
//将第3位取反,不影响其他位——
P0^=(1<<3);

if判断语句过长换行:

//判断转行 用 \
            if (A == B\
                && C == D\
                && E == F
                )

switch语句注意点: 

switch语句注意点:
    1、勿忘记添加break;否则语句会按顺序执行下去。
    2、勿要把default:放在首位,这样即便switch的值与case值不符
却依旧能进入不应该执行的语句。
	switch (2)
	{
		default:
		case 3:	
			printf("为默认default,即便2不是3,依旧能进入");	
		case 1:
			printf("上方无break,照常进入");
		break;
	}

 宏定义注意点:

宏定义注意:

1、在使用宏定义判断的地方包含对应定义处的头文件,避免宏定义判断错乱。
2、在宏定义的.h头文件内,最好用括号将定义的值进行保护。

使用宏定义进行判断时:

某个头文件内:
A (1)    

在某个.c利用其他.h文件内定义的宏进行判断(若未包含对应的.h,则可能出现if else错乱的现象):
#if A

#else

#endif

 extern不能在.c内引用.cpp内的全局变量:

对于.cpp内定义的全局变量,在.c内extern引用将会报错,无法引用。两者文件后缀需一致。

 全局定义结构体指针变量需给与确切空间:

无论是C还是C++,在全局定义一个结构体指针变量时,都要给与一个确切的地址
指向一片空间,不然在操作时将会程序错误。
注意:该片地址可以为sdram内的地址,但不能为NULL,否则程序也会错误。

 消除按键抖动方式:

软件消抖方式:

//①按键延时消抖
static void Delayns(unsigned int n){while(n>0){n--;}}
//在读取按键之前加上延时
Delayns(65535);


//②通过判断两个状态是否相等来 判断状态确实有变化(类似于按键消抖过程)
if (input_status == input_status0)

硬件消抖方式:
在按键与IC引脚连接线中加一个对地电容,一脚接该连接线,一脚接电容

硬件消抖加电容

源码补码:

Keil软件操作:

Keil中对32单片机的debug处理方式 

C51的Keil Debug:

出现以下问题,说明破解机不是C51版本的,Keil需要重新破解:

 keil特有变量

 数据类型比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值