一:指针,指针变量,引用,取地址符:
前提 :
1.“ * ” 的两种用途
2." & “的两种用途
2.1:引用
-
场景一:声明引用变量
-
int &r = a; #将r 作为a的别名 和 a 一样(但是不能修改引用)
-
例如 r = 6 : #实质是 先将 a修改成6 然后r的引用也变为6
-
场景二:函数形参声明 引用变量
-
void test2(参数类型 &y)
-
void main(){
-
test(a); // 相当于 将y作为a的别名,当在test2中 修改y时,实质上的操作是:先修改了a,然后同时 y 的引用也指向 新的 a。
-
}
-
-
场景三:指针类型 和 引用 同时出现在形参位置
-
void test2(参数类型* &y) //此处表示,一个指针变量y ,将会成为 调用test2 时,传递过来参数的引用
-
void main(){
-
-
test2(p);
-
}
-
当main函数调用test函数时,test1函数空间会开辟一块新的内存空间,并且创建一个指针变量y,此时指针变量y 和 p 是同一个指针,q是p的别名(引用))
2.2:取地址
-
p = &a;
-
int *q = &a;
-
-
printf(“%d”,*q);
-
// 10
-
补充:
1: int* p,q; 和 int *p,q; //表达相同含义 等价 int *p;int q;
举例: int a = 5;
int *p = &a;
int **q = &p;
print(q)
print(*q)
print(**q)
//输出 a
二 : malloc(),动态申请地址空间
1.原型定义 void *malloc(int size);
malloc()使用 : (数据类型*)malloc(sizeof(数据类型)*申请数据数量)
补充:
1.由malloc定义,其返回对象是指针类型,只能被指针变量接收
三:—> 和 . 作用 区别
1.作用:
-
A.B 则 A为对象或者结构体; 点号(.):左边必须为实体。
-
A->B则A为指针,->是成员提取,A->B是提取(*A)中的成员B,A只能是指向类、结构、联合的指针; 箭头(->):左边必须为指针;
补充:联合体(union) 参考文章: 中第二部分
2.理解:
s.member 等价于 (&s)->member (*p).member 即是 p->member (p->member 等价于(*p).member )