C/C++语言中指针的意义

看到这个面试题,估计很多刚学C指针的同学都会搞错.

我们知道计算机只认识0和1,所有的数据,包括图片,文字等最终都是转换成0和1来表示.
为了方便说明,我们用十六个二进制数组成的一个十六进制数来表示.


在win32系统中,内存地址是从0到2^32bit(相当于0到4GB),win32中VC6.0中指针本质就是一个占4个字节的无符号整形(unsigned int),能取0到2^32中所有的值的任一个值,即指针能向计算机内存中任何一个地址.

打印的结果如下:

上面定义的指针和其它系统能定义的所有指针在win32系统中用sizeof测试都是4.

指针有什么区别呢?
比如char *pChar和int *pInt:
pChar只是告诉程序我保存的内存地址处存放的是字符变量,编译器会使程序读取这个地址的值按字符的方式读取.char在内存中只占一个字节,*pChar那就是读取pChar保存的地址指向的内存的值,仅仅读取一个字节,把这个字符的ASCII编码返回给我.


pInt只是告诉程序我保存的内存地址处存放的是int型变量,编译器会使程序读取这个地址的值按int型变量的方式读取.int在内存中只占四个字节,*pInt那就是读取pInt保存的地址指向的内存的值,读取四个字节,把它们组合成一个int型变量返回给我.

光说不练,我们可以写个测试函数测试下

打印结果如下

所以定义指针的目的就是为了告诉编译器这个指针变量保存的地址指向的是什么类型的值,编译器使程序按指定数据类型方式来读取指针指向的内存中的数据.


我们可以把上面那个面试题改成如下

你会如愿在控制台程序中看到打印的"Hello World",并且没有任何内存泄露.
但看到这么奇怪的程序,感觉还是很别扭,正规的写法如下

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值