char* a = *(char**)e1 的char**什么意思
时间: 2023-12-06 11:05:28 浏览: 38
`char**`是一个指向指针的指针,也称为二级指针。在`char* a = *(char**)e1`中,`(char**)e1`将`e1`强制转换为指向指针的指针,即二级指针,然后`*(char**)e1`将其解引用为指向字符的指针,即一级指针。最终,`char* a`将指向解引用后的一级指针所指向的字符。
相关问题
int cmp_chars(const void* e1, const void* e2) { return strcmp((char*)e1, *(char*)e2); }为什么用的是const void*
使用const void*作为函数参数的原因是为了增加函数的通用性和灵活性。
首先,const关键字表示指针所指向的数据是只读的,即在函数内部不会修改指针所指向的数据。这样做可以提高代码的安全性,避免无意中修改了不应该被修改的数据。
其次,void*是一种通用指针类型,可以指向任何类型的数据。这意味着我们可以将任意类型的指针传递给该函数,而不需要为不同的数据类型编写多个函数。这种灵活性使得函数可以适用于不同的场景,提高了代码的重用性。
在具体实现中,我们可以通过类型转换将void*指针转换为相应的类型指针,以便在函数内部进行操作。在这个例子中,我们将const void*转换为char*和char**,并使用strcmp函数进行比较。
总而言之,使用const void*作为函数参数可以使函数更加通用和灵活,适用于各种不同类型的数据。
51单片机lcd1602利用e1的4*4矩阵键盘显示数字
首先,你需要连接51单片机和LCD1602显示屏。然后,连接4*4矩阵键盘到51单片机的E1引脚。
接下来,你需要编写51单片机的程序,使其能够读取4*4矩阵键盘的输入,并将数字显示在LCD1602屏幕上。以下是一个简单的示例程序:
```c
#include <reg51.h>
#define LCD_DB P0
sbit LCD_RS = P2^6;
sbit LCD_EN = P2^7;
unsigned char KeyTable[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void Delay10ms() {
unsigned char i, j;
i = 25;
j = 214;
do {
while (--j);
} while (--i);
}
void LCD_WriteCmd(unsigned char cmd) {
LCD_RS = 0;
LCD_DB = cmd;
LCD_EN = 1;
Delay10ms();
LCD_EN = 0;
}
void LCD_WriteData(unsigned char dat) {
LCD_RS = 1;
LCD_DB = dat;
LCD_EN = 1;
Delay10ms();
LCD_EN = 0;
}
void LCD_Init() {
LCD_WriteCmd(0x38);
LCD_WriteCmd(0x0c);
LCD_WriteCmd(0x06);
LCD_WriteCmd(0x01);
}
unsigned char KeyScan() {
unsigned char i, j, key;
P1 = 0xf0;
if (P1 != 0xf0) {
Delay10ms();
if (P1 != 0xf0) {
key = P1;
P1 = 0x0f;
switch (key) {
case 0x70: i = 0; break;
case 0xb0: i = 1; break;
case 0xd0: i = 2; break;
case 0xe0: i = 3; break;
}
switch (P1) {
case 0x07: j = 0; break;
case 0x0b: j = 1; break;
case 0x0d: j = 2; break;
case 0x0e: j = 3; break;
}
return KeyTable[i][j];
}
}
return 0xff;
}
void main() {
unsigned char key;
LCD_Init();
while (1) {
key = KeyScan();
if (key != 0xff) {
LCD_WriteCmd(0x01);
LCD_WriteData(key);
}
}
}
```
这个程序会将4*4矩阵键盘的输入映射到KeyTable数组中,然后将相应的数字显示在LCD1602屏幕上。你可以根据自己的需要修改程序来实现更复杂的功能。