指针,指针变量,引用,取地址符,malloce()函数使用,C中“—>” 和“ . ” 作用与区别

目录

一:指针,指针变量,引用,取地址符:

前提 :

1.“ * ” 的两种用途

2." & “的两种用途

2.1:引用

2.2:取地址

补充:

二 : malloc(),动态申请地址空间

1.原型定义 void *malloc(int size);

补充:

三:—> 和 . 作用 区别

1.作用:

2.理解:


一:指针,指针变量,引用,取地址符:

  • 符号“ * ” 和 指针变量

  • int *p; #这个代码的含义是: 创建一个指针变量:p, p是一个指针变量,而p前面的 “ * ” 是在声明p是一个指针变量

  • *p ; #这个代码的含义是:解引用 指针变量p (取出指针变量所存的地址中的内容)

  • int &q; #这个代码的含义是: 创建一个地址变量:q, q是一个地址变量,而q前面的 “ & ” 是在声明q是一个地址变量

  • &q; #这个代码的含义是:取地址, 取出变量q的地址 (取出指针变量所存的地址中的内容)

前提

  • int e = 10;

  • int a = 5;

1.“ * ” 的两种用途

  • 1.1:解引用:返回指针所指对象的值

  • 使用场景: 想要修改指针变量指向地址内容的值时,使用解引用

  • int *p=&a;

  • *p = 50; //此处相当于将 a中内容修改成50;

  • 1.2:声明指针变量:表面该变量是指针变量

  • 场景一:

  • int *p;

  • 场景二:在形参声明指针

  • void test1(int* q) {

  • }

  • void main1(){

  • test1(p) ;

  • }

  • 当main函数调用test函数时,test1函数空间会开辟一块新的内存空间,并且创建一个指针变量q,并且将p指针的内容 存放到q指针中(p,q是单独存在的两个指针,知识他们存储的内容是一样的;)

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(){

  • int *p=&a;//声明一个指针变量p,并且将 a的地址赋给p;

  • test2(p);

  • }

  • 当main函数调用test函数时,test1函数空间会开辟一块新的内存空间,并且创建一个指针变量y,此时指针变量y 和 p 是同一个指针,q是p的别名(引用))

2.2:取地址
  • p = &a;

  • int *q = &a;

  • q = &e;//取出e的地址 赋值给指针变量q

  • printf(“%d”,*q);

  • // 10

  • 上述操作 当输出*p 结果应该是 e,但这并不意味着修改了 变量a ,这只是仅仅将指针变量p内的存储内容从a的地址改为e的地址

补充

1: int* p,q; 和 int *p,q; //表达相同含义 等价 int *p;int q;

2.二级指针:int "* *p" ; //表示 p是一个二级指针,p存储的是一个一级指针的地址

“ * * p ” //表示 二级解引用,**p 的值 是 p内存储一级指针所存储的地址内存储的数

举例: int a = 5;

int *p = &a;

int **q = &p;

print(q)

// 输出p的地址

print(*q)

//输出a的地址

print(**q)

//输出 a

二 : malloc(),动态申请地址空间

1.原型定义 void *malloc(int size);

malloc()使用 : (数据类型*)malloc(sizeof(数据类型)*申请数据数量)

malloc()返回值: malloc()返回开辟出内存空间的首地址

补充:

1.由malloc定义,其返回对象是指针类型,只能被指针变量接收

2.malloc申请空间使用完成后 需要free(),且free收到参数必须是调用malloc()时 malloc返回的地址空间首地址;

三:—> 和 . 作用 区别

1.作用:

2.理解:

s.member 等价于 (&s)->member (*p).member 即是 p->member (p->member 等价于(*p).member )

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值