指针其实不难,不用总是转弯的做题,对工作没什么用
总是有人讨论指针的问题。很多人认为是学习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