看不懂的代码块积累_C/C++

001 指针的基本使用

//指针的基本使用:
int a, *m; //  1)声明一个int类型指针;
a=1;
m= &(a); //   2)变量a的地址赋值给m,即指针指向变量a
int *n = &a ; // 直接定义指针n获得a的地址;
*m =10; //   3)指针m指向变量a赋值为10。间接访问符,没有声明变量时,*是间接访问运算符,当作其指向的的变量用。
*m= *m +1;
++ *m;   //都是二级,从右向左,先算*m=a; 然后++a
*(m) ++; //()是一级,从左到右,先算*m=a, 然后a++
*m++  // 都是二级,从右向左,先算m++,地址加一,指向下一个字节,然后算*m, 很可能取出一个错误的值;
  • 解释:
    • 1)1. 变量声明 int * p; char * m 本质都是开辟了一块int大小的字节块,用于存放地址; 不同类型指针差别在于*p *m间接访问运算时取出字节块大小不一,因此可能出现指针值相同,但取出值不同(不同类型指针);
    • 2)p = xxx, 赋值的时候当作一个存放地址的int变量。
    • 3)*p= xxx, 赋值的时候当作背后指代的变量使用;
    • struct Engine * p = (struct Engine * ) (m); 强制转换后,p和m的值相同(指向地址相同),但是*p, *m不同(指向数据不同)。

002 指针的强制类型转换(1,2)

  • 指针的强制类型转换1
/指针的强制类型转换1:
struct Engine*pEngine = (struct Engine*) calloc(1, sizeof(strcut(Engine)));
///等价于:
int *m ;
struct Engine*pEngine; //1)
m=  calloc(1, sizeof(strcut(Engine))); // 2)
pEngine = (struct Engine*) m;  //3)
  • 解释:
    • 这句话进行指针的强制类型转换,分别干了三件事情
    • 1)struct Engine*pEngine; 声明一个Engine结构体类型的变量;
    • 2) 调用calloc在动态内存中开辟一块struct大小的字节块,并返回字节块首地址;
    • 3)将返回的首地址进行强制类型转换,转化为struct类型的指针;
  • 指针的强制类型转换2
/指针的强制类型转换2:
int * m;
struct Engine *pEngine = (struct Engine *) (m); // 指针强制类型转换,int *m → struct Engine * p,两个不同类型的的值相同
///等价于:
struct Engine *pEngine; //1)声明Engine结构体类型指针;
pEngine = (struct Engine *) (m);//  int指针m强制转化为Engine结构体指针
  • 解释:
    • 相比上一个强制类型转换,稍微简单一点,包含两步:
    • 1)struct Engine*pEngine; 声明一个Engine结构体类型的变量;
    • 2) int指针m强制转化为Engine结构体指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值