C++ int类型的指针在递增后在内存中移动1个地址

C++ int类型的指针在递增后在内存中移动1个地址,c++,pointers,increment,C++,Pointers,Increment,代码按预期工作,直到第22-24行,在那里我们打印8,后面是地址。增加指针地址只会使地址增加一个字节,而它应该将地址移动4个字节。该问题不会发生在阵列中,或者如果第22-24行单独运行 #include<iostream> using namespace std; void main() { int *p; //int a[10] = { 0 }; //p = a; int a = 100; p=&a; cout << "1.

代码按预期工作,直到第22-24行,在那里我们打印8,后面是地址。增加指针地址只会使地址增加一个字节,而它应该将地址移动4个字节。该问题不会发生在阵列中,或者如果第22-24行单独运行

#include<iostream>
using namespace std;

void main()
{
   int *p;
   //int a[10] = { 0 };
   //p = a;
   int a = 100;
   p=&a;
   cout << "1.    "<<p <<"    "<<*p<< endl;
   p++;
   cout << "2.    " << p << "    " << *p << endl;
   ++p;
   cout << "3.    " << p << "    " << *p << endl;
   ++*p;
   cout << "4.    " << p << "    " << *p << endl;
   ++(*p);
   cout << "5.    " << p << "    " << *p << endl;
   ++*(p);
   cout << "6.    " << p << "    " << *p << endl;
   *p++;
   cout << "7.    " << p << "    " << *p << endl;
   (*p)++;      //This is the problem, increments the address by 1,    even though its in int type
   cout << "8.    " << p << "    " << *p << endl;
   *(p)++;
   cout << "9.    " << p << "    " << *p << endl;
   *++p;
   cout << "10.    " << p << "    " << *p << endl;
   *(++p);
   cout << "11.    " << p << "    " << *p << endl;
   cin.get();
}
#包括
使用名称空间std;
void main()
{
int*p;
//int a[10]={0};
//p=a;
INTA=100;
p=&a;

cout最初,您将p设置为指向堆栈上的整数变量。当随后递增指针时,您指向堆栈上的内存区域,该区域在调用函数时可能会发生变化(例如cout)。当函数返回时,它可能已更改递增指针p指向的内存位置,这可能解释了您的问题。 您应该声明一个足够大的数组,以容纳您将要执行的指针地址范围。我注意到您注释掉了数组代码,该代码将按照您的预期工作。

您的代码是:

p = &a;
p++;
现在
p
指向
a
的末尾。这仍然可以,但是在下一行:

cout << "2.    " << p << "    " << *p << endl;

cout在此语句中(*p)++;地址本身不是递增的。后递增的是*p的值。@VladFrommosco遗憾的是,我不能在这里发布输出的屏幕截图,但地址正递增1。地址从00C1FA14到00C1FA15。在任何情况下,程序都有未定义的行为。您的内存已用完“不要试图修复你的程序,这样它就不会读取或写入无效内存(并且没有任何其他UB实例),你应该会发现奇怪的输出消失了。(如果没有,那么将你正在运行的代码与实际输出的拷贝粘贴一起发布)。