C中默认地址问题
一:
我在C中定义了一个指针数组,即写在main函数外(开发环境在VC中),如下
typedef struct Edge//边的定义
{
int ymax;
float x;//边的最低点的x坐标
float y;//边的最低点的y坐标
float deltax;
struct Edge *next;
}*edge;
Edge *a[111];//定义指针数组
Edge *AEL;
然后在main()函数中对a[111]初始化后,又对指针AEL赋值,可是对指针初始化后才发现,数组最后一个a【111】的值,即指针发生了变化。
我想请教老师们,这是问什么,难道定义一个指针后,默认指向指针数组的最后一个数组元素吗???
二:
我有时候碰到,当对一个数组进行操作后,其值本不应该改变,可是操作后其值就是改变了(调试后显示其值改变),我想问下,这是为什么。比如图形学中用line(x1,y1,x2,y2);后数组值(因为x1,y1,x2,y2存放于数组中),想问老师们,这是为什么? C 基础
[解决办法]
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]
srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
b[(a=rand()%11)]=0;
Sleep(100);
b[(a=rand()%11)]=1;
Sleep(100);
b[(a=rand()%11)]=2;
Sleep(100);
b[(a=rand()%11)]=3;
Sleep(100);
b[(a=rand()%11)]=4;
Sleep(100);
}
return 0;
}