|
发表于 2005-2-13 23:16:42
|
显示全部楼层
osfans 说数组实际上是指针 只是为了说明两者的相似处
: 数组相当于一个 指向固定内存地址 的指针
对数组的操作完全要靠程序员自己来控制,下面是原来程序的一些修改
用来说明问题
#include <stdio.h>
#include <stdlib.h>
void test_ary(int ary[]);
int main(){
int as[10],intary[10] ; /// 添加了一个 as 数组!
int i;
printf("\n\n%d : %d : %d\n\n", intary, as);
test_ary(intary);
printf("\n......................\n\n");
for(i=0;i<10;i++)
printf(" %d ||", as);
exit(EXIT_SUCCESS);
}
void test_ary(int ary[]){
int i;
for(i=0; i<15 ; ++i){ //// 会影响到 main 里面的 as 数组!
ary=i;
printf(" %d ..",ary);
}
}
系统给intary分配了一个可以使用的空间(即不被其他程序使用,初始为随机值)
as数组的空间 intary空间之前分配,但是 地址值却大(分配地址从小往大,因为是堆栈)
可以通过 printf("as address is : %d comparing with intary address : %d \n ", as, intary);
查看地址
添加as 数组的目的就是说明 test_ary(int ary[]) 函数越界后会对 as数组造成影响
我机子里面的地址显示是 intary数组除了10个int的空间外 后面又添加了 2个int的空间,
之后才是 as数组的 空间.
/***
这个2个int空间我想不清楚为什么,我用char数组是添加了6个char空间.
或许每个 编译器有所不同. 我想如果是为了分清界限添加多余空间的话也没什么道理,
反正编译器会对它们进行管理. ----- 这个没搞清楚
***/
在test_ary(int ary[])之后,as 数组内容会被部分影响到(前3个变成 12,13,14) |
|