一、定义
int/char/double(etc) * p;
二、指向具体对象
1.new(malloc/alloc运算符给指针分配具体空间)
char * p;
p = new char[100];
strcpy(p,"Hello");
2.用&运算符指向某对象
int a = 5,* p;
p = & a;
3.将同类型的指针赋给他
char * p1, * p,a[3] = "abc";
p1 = a;
p = p1;
三、指针运算
- 和Int相加减 表示指向地址的变化(若指向char p+1则指向数组下一个元素 若指向int p+1则增加一个整形单位长(ps:64or32位是4byte 16位是2byte))
- 当指针p1和p2指向同一类型 可以赋值 、进行 = =/</>等关系运算
p2 = p1;//赋值 使p1 p2指向同一对象 注意指针悬挂问题
char * p ,* q,s[4] = "abc";
p = s;
q = s + strlen(s) - 1;
while(p < q) swap(p,q);
3.指向同一组成员的指针可以相减(不能相加) 结果为两指针之间相差元素的个数
char * p2,* p1,s[4] = "abc";
p2 = s;
p1 = s +2;
int t = p1 - p2;//t = 2;
四、指针and数组
1.(数组的指针性)数组的名字就是指向该数组的第一个元素的指针,即第一个元素的地址
int a[10] ,*p;
p = a;//等价于p = &a[0];
a[i] 等价 *(p + i) 等价 *(a + i)
指针和数组通常可以互换。
2.指针运算比数组运算快 但尽量少用 避免悬挂 以及可读性降低
3.数组是常量 指针是变量 可以改变变量的值 不能改变常量的值也不能取常量的地址 如:
可以写
p = a;p ++;
不可以写
a ++; a = p;p = &a;
五、Const 指针
1.const定义一个指针指向的数据 则此指针指向的数据为常量 不可改变此数据 但可以让指针指向别的内容 如
const char *p = "zbqzhenshuai";
p = "shuaizhatian";//right,指针指向另一个数据
*p = "youdianshuai";//wrong
2.const定义一个指针 则此指针为常量 不可改变指针本身 可以改变指针指向的数据 且跟定义一般的符号常量那样必须初始化 如
char *const s = "zbqzhenshuai";
p = "youdianshuai";//wrong
*p = "shuaizha";//right,原来数据中的"zbqzhens"被替换为“shuaizha”
3.const定义指针加指向的数据 都不可改变
const char *const p = "zbqzhenshuai";
Over.
ps:啊 终于写完了 迷迷糊糊不知道写了啥 睡了睡了