2012-9-16 数码视讯 嵌入式C软件工程师
/*
* file name : test_shuxun.c
* function : test i don't know
* date : 2012-9-16
* author : enyblock
*/
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
unsigned char *p = (unsigned char *)0x801000;
unsigned long *p2 = (unsigned long *)0x810000;
int arr[] = {6,7,8,9,10};
int *ptr = arr;
printf("%p\n%p\n",p+5,p2+5); /*注意P2是long类型,四个字节*/
*(ptr++) += 123;
printf("%d,%d\n",*(ptr),*(++ptr)); /*看汇编代码可知,ptr先++,压栈顺序从右往左*/
return EXIT_SUCCESS;
}
总结:
1. 当地址进行加减的时候,需要看该地址的类型,不能单单的给地址进行加或者减,上例给出明确解释,注意long类型4字节,所以p2+5 相当于加了5×sizeof(unsinged long) = 20 即0x14;
2.printf函数在调用的时候,调用顺序是从右往左的,看汇编即可
3.总线分为3类:数据总线,地址总线,控制总线