c语言指针漏洞,C语言_指针随笔 - 风哲的个人空间 - OSCHINA - 中文开源技术交流社区...

指针:

指针就是地址,地址就是指针。

地址就是内存单元的编号。

指针变量是存放地址的变量(例:int* p,这里的p就是指针变量,用于存放地址)

指针和指针变量是两个不同的概念:平时也把指针变量间读为指针,也就是说下面示例代码中的p既是我们所说的指针,也是我们所说的指针变量。

例:

指针里面存放的是100:这句话中,指针就是地址

指针里面存放的是地址:这句话中,指针就是指针变量

为什么使用指针:

指针能直接访问硬件(OpenGL显卡绘图)

快速传递数据(指针表示地址:如change_numbers方法调用,调用方法change_numbers函数的时候传入值进去,无法改变main方法中变量的真实值,只有传入地址(也就是指针)才能真正改变main函数中的变量的值)

返回一个以上的值(返回一个数组或者结构体的指针)

表示复杂的数据结构

方便处理字符串

有点像面向对象

示例代码:

#include

void pointertest();

void change_numbers(int a, int b);

void main()

{

int a = 100;

int b = 200;

change_numbers(a, b);//这里传的是int类型的变量值,操作的是change_numbers函数中卫形参开辟出来的地址,不能真实的改变main方法中的a,b的值。

printf("a = %d \nb = %d \n", a, b);

change_numbers2(&a, &b);//这样就是直接把a,b在main方法中开辟的地址传过去,是直接操作main函数中a,b所在的地址,能直接改变main函数中a,b的值。

int i = 10;

int* p; //指针的声明,这时候会开辟出一块内存,也就是一个地址,但是这块内存中没有存放东西(int*类型)

//C语言中没有String类型,可用指针返回一个字符串

char* h = "Hello World !";

printf("array : %s\n", h);

p = &i;//指针的初始化,为上面开辟出来的内存进行赋值,指向了i这个整数所在的地址

printf("*p = %d \n", *p);

*p = 100;//这里的p就是指针(int*类型)(其实它叫指针变量,只是平时我们 习惯性叫它指针),*p指的是p指向的地址中的值(int类型)

printf("更改*p的值!\n");

printf("*p = %d \n", *p);

printf("i = %d \n", i);

printf("修改i的值!\n");

i = 50;

printf("*p = %d \n", *p);

printf("i = %d \n", i);

}

void change_numbers(int a, int b)

{

int temp;

temp = a;

a = b;

b = temp;

}

void change_numbers2(int* a, int* b)

{

int temp;

temp = *a;

*a = *b;

*b = temp;

}

运行结果:

59651529868c7f8d20f4702e01ed62e2.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值