- const:常量、只读【不能变】
char *p;
const char *p; 【T】 字符串内容可以为“hello world”或“aaa”,但只读(不可修改)
char const *p;
char * const p; 【T】 一般为硬件资源 ,地址不变,但地址内容可变。
char *p const;
const char * const p; ROM
- volatile
防止优化指向内存地址。
- typedef
- 指针加法
指针的加法、减法运算,实际上加的是一个单位,单位的大小为sizeof(p)
指针的自增和加一是有区别的:
eg: int *p; p+1 //以p为参考位置(p值不变)。
p++、p-- //地址会更新(p值有变化)。
eg:
int a = 0x12345678;
int b = 0x99991199;
int *p1 = &b;
char *p2 = (char *)&b;
printf("p1+1 is %x,%x,%x\n",*(p1+!),p1[1],*p1+1); //12345678,12345678,9999119a;
printf("p2+1 is %x\n",p2[1]); // 11 char型,p2=p[0] = 99(低八位),p[1]为11。
注: *(p1+1) ===p1[1]; //此时[]为标签,不是数组。
- 指针越界访问。
① 使用指针修改const修饰的值。
eg:
const int a= 10;
int b = 20;
printf("%x ",a); //a = 14
printf("%x ",b); //14 可见连续声明的变量(同类型)二者之间相差为sizeof(int)。对int来说相差为1,即4bit。
int *p = &b;
p[1] = 30或*(p+1) = 30; //该语句编译不报错,但是a输出的值仍是a,具体参考:https://blog.csdn.net/a3125504x/article/details/78835973
printf("%x",p[1]);
- 指针逻辑操作符
①跟一个特殊值记性比较 0x0:地址的无效值,结束标志。
if(p == 0x0)
NULL
②指针必须是同类型的比较才有意义