c语言 指针与数组解决办法

c语言指针与数组最近用到了指针与数组遇到了这样一个问题 for(int i0iNi++){cin*(p+i)}这样输入是

c语言 指针与数组
最近用到了指针与数组  遇到了这样一个问题
 for(int i=0;i<N;i++)
{
cin>>*(p+i);
}
这样输入是对的,
但 for(int i=0;i<N;i++)
{
cin>>*p;
p++;
}
这样输入就会出现问题 不知道是什么原因。。 c语言 指针 数组
[解决办法]


//第一种
cin>>*(p+i); //p指向的地址没有发生变化

//第二种
p++ ;// p = (p+1)修改了p的指向地址,相当于p指向了下一个类型元素

//检查下p是否可修改地址

[解决办法]
输入不会有问题,只是赋值完后不能再利用p去操作这些数,因为p的地址已经改变了。

char *pTemp = p;
for(int i=0;i<N;i++)
{
cin>>*pTemp;
pTemp++;
}

printf("%c\n",p[0]);
......
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

还请把p的定义贴出来啊,p指向的地址是否可写也是要考虑的

p的定义如下:
int *p,N;
    cin>>N;
    p=(int *)malloc(N*sizeof(int));//分配了动态数组a[N]



我在自己的编译器上都运行通过,你是什么问题,还请描述一下。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    int *p,N;
    cin>>N;
    p=(int *)malloc(N*sizeof(int));//分配了动态数组a[N]
    for(int i=0;i<N;i++)

cin>>*p;
p++;
}
for(int j=0;j<N;j++)
{
cout<<*p<<endl;
    p++;
}
return 0;
}

这是我的代码  你试试吧  我想输入一个数组 但它输出的实地址


你的问题很明显,{ 
cin>>*p;
p++;
}
p的值已经改变了,也就是说,p不再指向开始的那段内存了,
    for(int j=0;j<N;j++)
    {
        cout<<*p<<endl;


        p++;
    }
你这里,p指向的是你开辟内存之后的内存,其内容是不可知的。