您的位置:首页 > 编程语言 > C语言/C++

C/C++学习一

2015-07-22 18:29 239 查看
一直在做应用,最近想花一点时间学习一下c/c++,研究的比较浅,求喷求指导

第一篇简单的看了一下指针

解决了一些自己一直以来没有理解的东西,看着没什么干货,不过感觉自己受益颇丰。

一.什么是指针

写了无数遍这样的代码,很久以来都没有懂

#include <stdio.h>
void main(){
int a = 1;
int *b = &a;
printf("a:%d\n", a);
printf("&a:%ld\n", &a);
printf("b:%ld\n", b);
printf("*b:%d\n", *b);
printf("&b:%ld\n", &b);
}


运行结果:

a:1
&a:140736506765324
b:140736506765324
*b:1
&b:140736506765312


结果说明

1.a的值
2.a的地址

3.a的地址

4.b的值也就是a的值

5.b的地址

小结一下:(关键是int *这玩意儿就是个数据类型,以前想太多了)

int *为指针类型;

变量b为一个指针类型的变量,他有自己的地址也就是&b(所有变量取值都是*,取地址&);

b赋值的时候其实写的很清楚&a,a的地址;

*b相当于*&a,a的值

就是如此简单啊。

二.指针作为变量的一些属性

上面&a,b,&b这种地址为何这么大,单位是什么(bit?byte?)?怎么玩的呢?既然指针类型是是种数据类型,占多大呢?

这俩问题竟然带出来一系列的问题。。。。

答案:(问题中产生的问题,所以一起找原因了)

32位操作系统:4字节

64位操作系统:8字节

为何会有区别呢?原因是cpu寻址空间大小的改变:

32位最大的寻址空间为2^32=4G=4 294 967 296

64位最大的寻址空间为2^64=2^14T=1.844674407371 * 10 19

由于我是在64位机器上编译的,所以地址都比较大(刚开始玩用整形输出溢出了。。醉)

&a:140736506765324
&b:140736506765312
看到上面的运行结果有疑问:

为啥b比a晚初始化,地址比a小?并不一定是这样的,和系统有关系,有时候是正序去创建地址有时候是逆序(向低位)创建。


有什么联系呢?这两地址之差是12(当然可能会出现不连续的状况,这里不谈),a是64位int占4个字节。指针变量b占8字节。

其实地址是没有单位的,或者说他根本不是一个需要单位的值,内存中每一个地址表示
1 字节,32位系统的4字节地址容量可以标记4G内存中的所有字节,所以问题在与没有理解地址。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: