为什么int的位置不对就报错呢。(指针)

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:32:04
#include <cstdlib>
#include <iostream>

using namespace std;

int main()

{
int p[]={0,2,4,6,8};
int *a=p;

for(int k=0;k!=5;++k)
{
int *j=a+k;
cout<<*j<<endl;
}
system("pause");
return 0;

}

这样写没错。

---------------------------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

int main()

{
int p[]={0,2,4,6,8};
int *a=p;
int *j=NULL;
for(int k=0;k!=5;++k,*j=a+k)

cout<<*j<<endl;

system("pause");
return 0;

}
这样写就很离奇报错。

首先你这行for(int k=0;k!=5;++k,*j=a+k)写错了, 应该是for(int k=0;k!=5;++k,j=a+k), 这样写只是改正了语法上的错误, 还有一个错误就是for循环最后一部分(;++k,j=a+k)是在执行完第一次循环后才执行这部分代码的, 当执行第一次循环体的时候,j还是NULL, 你cout一个*NULL一样会报错, 所以你的程序应该改成这样:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()

{
int p[]={0,2,4,6,8};
int *a=p;
int *j=a;
for(int k=0;k!=5;++k,j=a+k)
cout<<*j<<endl;

system("pause");
return 0;

}

两个程序都是错的,你对指针还没理解

int *j=a+k; 这里是指针
*j=a+k 注意 这里进行了 解引用 所以 要把 a+k 进行解引用才行 *(a+k)或者把j前面的*去掉 就可以了