|
发表于 2004-12-24 01:05:38
|
显示全部楼层
我的理解:
所谓数组,就是把内存中的某块确定大小、地址、存贮类型的存贮空间给一个命名,数组名不能作为变量理解,你要把整个这样的存贮空间当成变量,对它的赋值实际上只能是给它的某个确定单元或整个存贮空间的每一个单元赋值,如:
- int a[10];
- for(int i=0;i<10;i++)a[i]=0;
- 或:
- int a[10];
- a[8]=0;
复制代码
而指针就是一个变量,它跟其它类型的如整形(int)、字符型(char)一样,可以赋值(条件是赋的值会被理解为地址)。现在假设你能确定0x8000开始的地址能被你访问而系统不会有意见,那么,下面代码:
- char* p;
- p=(char*)0x8000;
复制代码
就把地址0x8000赋值给了指针变量p;这跟
没有本质区别。上面(char*)0x8000;只是作了类型变换。
可是一般来说,我们用指针变量,来代表某一个地址,因此,很多人就把指针当地址,我不这么认为,应该说,指针变量的值是一个地址,看看下面代码:
- .
- .
- .
- char* p;
- p=(char*)malloc(64)
- printf("%X,%X",p,&p);
复制代码
它会打印两个什么值?p-打印的是malloc分配的地址的首地址,而&p-打印的是p这个变量占用的内存地址,这两个值绝对不会一样。也就是说,指针变量本身还占了一个地址,这跟其它变量是一样的,变量地址跟变量的值没有任何本质联系。我们再看数组:
- .
- .
- .
- int a[10];
- printf("%X,%X",a,&a);
复制代码
这个打印结果是两个值一样,都是数组a指示的首地址。也就是我开头讲的数组名不能作为变量理解,它只是个代名,不像变量,占有存贮空间。
c语言里,指针就是c语言的灵魂,用法不胜枚举,这里,就主题“C语言里面的指针和数组
”略述自已的一点见解,不当之处,还望指正。 |
|