关于指针变量


这里的str2不应该是0x08000042吗,因为“A”就占两个字节,那b的开始地址即str2就应该是0x08000042啊为什么是0x08000044啊,这怎么理解

其实你这样看不能很好的说明str2的地址就必须是紧跟着str1的,毕竟你这是两个临时变量,地址是可能随机分配的。

volatile unsigned char *st1[] = {"Hello", "Hello"};
这行代码,
&st1[0]和&st1[1]的值,在不同位数的处理器中,相差的值也会不同。
比如STM32处理器,是32位处理器,保存一个内存地址就要32位,也就是4个字节,那么
&st1[1]-&st1[0]=4

然后思考下:
volatile unsigned char str[3];
这行代码中,在32位处理器里,&str[1]-&str[0]等于多少?