小白求解这个很简单的程序?

int main()//为什么能正常输出?????????????????????????????
{
int *a;
int j = 2;//不加这一步并且修改第九行报错
int i;
a[0] = 100;
a[1] = 50;
for(i=0;i<j;++i)//第九行,这里把j改成2就程序运行会出错,但是用j就没问题,为什么
{
printf("%d",a[i]);
}

int *a;
->
int *a = new int[2];

否则指针没有初始化,运行结果无法预料

a是个int*的类型的指针,没有初始化,其指向的位置是随机的且没有访问权限的,因此不可以使用[]运算符;
所以你的程序应该在a[0]这行就会报错啊