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

C中默认地址有关问题

2013-11-25 
C中默认地址问题一:我在C中定义了一个指针数组,即写在main函数外(开发环境在VC中),如下typedef struct Edg

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 基础
[解决办法]

引用:
1 数组是从0开始到110, 不会a[111] 越界了! 你是如何给AEL赋值的呢?
2 数组传参的时候和指针的效果是一样的!可能是通过内存地址修改了其内容


我同样这个观点;

你肯定混淆了 a【111】和a【111-1】区别
[解决办法]
ALL默认指向的是NULL,因为其为全局变量;若ALL执行最后一个元素,这个可能要看你是如何初始化的。
[解决办法]
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#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;
}

热点排行