指针

 C语言中指针算很重要的一部分   是C的灵魂 

 指针是指示一个内存地址的变量    一般指向一个函数 或者变量   使用一个指针时  程序既可以直接使用这指针所孙处的内存地址 又可以使用地址所存储的函数的值 


内存是按照顺序编号的一系列存储单元


例 1:

int  num = 100;//定义一个变量
printf("%x",&num);//获取变量的内存地址
int *p =   #//定义一个指针变量*p 然后为*p的valuse赋值 为num的地址  指针的必须赋值
printf("\n*p=%d p=%x &num=%x",*p,p,&num);//*p就是获取指针的VALUE所对应的内容 *取内容  赋值之后的P=&num
getchar();

总结 1:& 取地址  2:*取内容  3:指针其实就是一个变量  他的类型是指针类型  4:指针必须定义一个类型   因为每个类型 所占的内存不同 长度不同

例2   读取 操作 别人程序的变量   

  C语言原则上来说 A程序无法访问B程序的内存   但是我们可以通过注射一个dll 来达到访问内存的目的

  可以先通过 onlydeg 等工具找到别人变量的内存地址

 之后

 _declspec(dllexport) void  go()
{
int *p = (int *)0x58fbc4;
*p = 500;


}

通过强转 导出DLL文件 注入别人程序 这样就可以改变数据了

总结:指针不能非法访问别的进程的数据


例3  a,b,c  3个数据 要求不改变数据本身值的情况下对  ABC 3个数字进行排序显示


//交换数据
void  swap(int *a,int *b,int *c)
{
int *p;
printf("%d--%d---%d", *a, *b, *c);
if (*a>*b)
{
p = a;
a = b;
b = p;
}
if (*a>*c)
{
p = a;
a = c;
c = p;
}
if (*b>*c)
{
p = b;
b = c;
c = p;
}
printf("\n%d--%d---%d",*a,*b,*c);


}
void main()
{
int a = 10, b = 50, c = 1;
swap(&a, &b, &c);
getchar();
}

总结 :指针他只是交换了他们的引用 交换了指针类型本身的value 并不是值  所以在这里仅仅交换引用 并没有起到叫魂 abc 3个值的作用


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值