C语言之指针

0x0001:指针分析

#include <stdio.h>
#include <stdlib.h>
void swap_t(int*a,int*b)
{int p;
  p=*a;                   #借助指针,交换变量值
 *a=*b;
 *b=p;

}
int main()
{
   int a,b;
   a=6,b=5;     #a,b的地址不变,但是经指针操作后其中的值交换
   int *p,*q;   #声明变量上,一般变量是被分配合法地址的,但是指针变量p是有地址的,但是p的内容可能是非法地址。
   p=&a;
   q=&b;             
   swap_t(p,q);   #单向传递:只进不出(数值无法回传)swap函数结束后,p,q不变
   printf("%d,%d",*p,*q);
}       

数组与指针
a[i]=>*(a+i),&a[i]=>(a+i)   等效
0x0001
p++;
*p;
0x0002
*p++与*(p++)一致,++与*优先级一致,右结合性,p++:第一步取p的值,*p,后p自增
0x0003
*(++p):先自增,后取p,后*p
因为C++编译器认为*和++是同优先级操作符,它们的结合性都是从右至左,这样一来,对于*p++来说,++只作用在p上而不会作用在(*p)上,所以*p++和*(p++)的效果完全一样!

0x0002:指针数组&堆&空类型指针

这里补充指针数组的知识,与之有关的主要的堆(动态内存分配)


int * p[4];//[]优先级比*高先p[4](数组形式),后与*结合,表示数组中都是地址

 void * p; //p为空类型(不指向确定)指针变量,不是'任何类型的指针'{提供纯地址}
 malloc原型:void * malloc(unsigned int size)
int * pt;
pt=(int *)malloc(100);  // void * 转化为int *


原文链接: https://www.cnblogs.com/zuoanfengxi/p/12423100.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C语言之指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/333825

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:22
下一篇 2023年3月1日 下午9:22

相关推荐