首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针其实不难,不用总是转弯的做题,对工作没什么用,该如何处理

2012-04-07 
指针其实不难,不用总是转弯的做题,对工作没什么用总是有人讨论指针的问题。很多人认为是学习C的主要障碍。我

指针其实不难,不用总是转弯的做题,对工作没什么用
总是有人讨论指针的问题。很多人认为是学习C的主要障碍。我想主要是教的方法的问题。下面有一个简单的例子。

void   test()
{
void*   a   =   NULL;
void*   b   =   (void*)&a;
void*   c   =   (void*)&b;
void*   d   =   (void*)&c;
void*   e   =   (void*)&d;
...
void*   y   =   (void*)&x;
void*   z   =   (void*)&y;
}

看看这个例子,其实所谓的指针只是一个空间,一般是32位(和操作系统有关,这个不考虑16位,64位系统)。   那么当程序进入这个函数的时候就给每个申明的变量分配空间。
a   4bytes
b   4bytes
c   4bytes
...
y   4bytes
z   4bytes

每个空间里的数据看你是否初始化。所谓的取地址就是这个空间在计算机内存的位置。

&a   是a这4bytes在那里。其他一样。

所以上面的函数可以一直写下去。

其实注意空间分配在什么地方可能更有用。   工作中经常有程序习惯不好的人将大的数组放在程序里。

这个例子中的b,c,d,e...y,z应该是连续的(4bytes).   因为这些申明的东西都在堆栈中,注意堆栈的空间相对较小。不要动不动放一个大的数组。

void*   pTest   =   (void*)GlobalAlloc(GPTR,   1000);
这个是在内存中申请了一个1000字节的空间。同时pTest是一个在堆栈中4bytes的空间用来放着1000个字节从哪里开始。

希望对大家有点帮助。




[解决办法]
谢谢楼主无私奉献
我学到东西了
[解决办法]
学习了........
[解决办法]

搂主的没有错,他是想更清楚地说明指针的本质,指针也是个变量, 变量也就有地址
void* b = (void*)&a;的语句很正常的。

[解决办法]
我测试过指针操作二维数组比用下标法操作快

一个4*4的二维数组赋值,用p[i][j]操作大概要600ns,但是用p++,只要240ns

热点排行