关于指针
关于指针
关于指针:
1.定义:
two ways. 1
int a = 5, *p = &a;
1 | int a = 5, *p; |
如果这么写是不合法的:
可以理解为该变量存储的内容是地址1
2int a = 5, *p;
*p = &a;
2.自增自减
\(*p++\) \((*p)++\) 1
2
3
4
5针对p指针加一,然后间接访问
int a[6] = {1, 4, 7}, *p = a;//a本身就是地址,不需要再&
cout << *p; // 1
*p++;
cout <<*p; // 41
2
3
4
5 p指针间接访问的内容加一
int a[6] = {1, 4, 7}, *p = a;
cout << *p; // 1
(*p)++;
cout << *p; // 2
3.指针与其他结合
宏定义
1 |
|
define仅仅是替换,typedf是定义了一个新的数据类型
上面的代码块也可以写成如下:
显然,s1,s3,s4是指针类型变量1
2
3
4
typedef char *type2;
char *s1, s2;
type2 s3, s4;
结构体
1 | struct Student |
当需要用指针来访问结构体里面内容,两种办法。 1
(*p).age = p->age
不允许写 (*p)->age
*p仍旧是一个值,可以这么考虑,你见过有人写std[0]->age的吗?
还要注意,p->age只是一个值,在scanf中仍旧需要取地址&
遇到字符是%c,需要&
遇到字符串是%s,不需要&