指针的注意事项

指针占的内存大小和平台有关,比如ARM32位 就是4字节,与指针的类型无关,指针本身存储着一个4字节的地址,*p

是告诉编译器,把指针指向的地址的内容解释为什么,跟定义指针的类型有关,对指针的运算,也是基于指针定义的类型




int main()
{


    unsigned char * p = (unsigned char *)0x30000000;
    printf("%x",++p);


}


// 0x30000001




int main()
{


    unsigned char **p = (unsigned char *)0x30000000;
    printf("%x",++p);


}


//0x3000004


p++ 所增加的地址大小取决于 *p 所存储的数据类型。 第一个中*p 为 unsigned char 第二个中为4字节的地址 。 本质就是取决于 地址表达式 中所存储的数据类型。 

 (*p)++  //p是二级指针 

所增加的大小应该是 以*p地址为基址 增加 p指针所对应的数据类型大小; 比如unsigned char ,就以*p为基址,增加1




(volatile unsigned char *)&s3c2440_nand->NFADDR ,强制转换成为一个指针,表示该地址里存储的是unsigned char的数据类型





你可能感兴趣的:(指针的注意事项)