概述
C语言中指针是一个神奇的东西,可以为编程带来极大方便。但使用不当又会产生不可预料的结果,需要大家慎重。下面用Arduino Nano编辑一段程序,看如何更好的使用C语言的指针。
指针及其应用
首先在程序的开始部分先定义两个变量:
unsigned char Pixel[128];
unsigned char *pixel_pt;
第一个变量Pixel是一个数组,同时也是一个数组的指针。*pixel_pt是一个无符号变量的指针。下面用程序来说明如何使用指针型的变量。
void setup()
{
Serial.begin(115200);
pixel_pt = Pixel;
for (unsigned char i = 0; i < 128; i++)
*pixel_pt++ = i;
}
void loop() {
if(Serial.available() > 0)
{
incomingByte = Serial.read();
// printing title
Serial.print("No");
Serial.print("\t\t");
Serial.print("Pixel");
Serial.print("\t\t");
Serial.print("*pixel_pt");
Serial.println();
pixel_pt = Pixel; // 地址指针又指向Pixel[0]
for (unsigned char i = 0; i < 128; i++)
{
Serial.print(i);
Serial.print("\t\t");
Serial.print(*pixel_pt++, HEX);
Serial.print("\t\t");
Serial.print(Pixel[i], HEX);
Serial.println();
}
pixel_pt = Pixel;
pixel_pt++;
pixel_pt++;
pixel_pt++;
pixel_pt++;
pixel_pt++;
pixel_pt++;
Serial.print("\r\n");
Serial.print(Pixel[6], HEX);
Serial.print("\r\n");
Serial.print(*pixel_pt, HEX);
Serial.println();
Serial.print(pixel_pt[6], HEX);
if (memcmp(&pixel_pt[6], &Pixel[0x0C], 1) == 0)
Serial.print("\r\nThe compare is OK");
else
Serial.print("\r\nThe compare is not OK");
}
delay(1000);
}
运行结果
No Pixel *pixel_pt
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
… 省略
126 7E 7E
127 7F 7F
6
6
C
The compare is OK
注意,在程序中使用了指针操作,pixel_pt++命令,相当于Pixel[i++]变址。用pixel_pt[6]也可以对地址变化后的第六个元素进行寻址。用Serial.print(pixel_pt[6], HEX);输出结果是C。