C++ C++;将指针分配给指针 #包括 使用名称空间std; 无效fn(整数*输入值){ int*ptr2=输入端ptr; cout

C++ C++;将指针分配给指针 #包括 使用名称空间std; 无效fn(整数*输入值){ int*ptr2=输入端ptr; cout,c++,pointers,C++,Pointers,在main中,变量ptr1未初始化为指向正确分配的内存块 因此,程序的其余部分会产生未定义的行为。在main中,变量ptr1未初始化为指向正确分配的内存块 因此,程序的其余部分会产生未定义的行为。在这两个示例中,您都取消了对未初始化指针的引用,这是未定义的行为 对于指针分配问题,您可以直接分配: #include <iostream> using namespace std; int main() { int *ptr1; *ptr1 = 7; int *p

main
中,变量
ptr1
未初始化为指向正确分配的内存块


因此,程序的其余部分会产生未定义的行为。

main
中,变量
ptr1
未初始化为指向正确分配的内存块


因此,程序的其余部分会产生未定义的行为。

在这两个示例中,您都取消了对未初始化指针的引用,这是未定义的行为

对于指针分配问题,您可以直接分配:

#include <iostream>
using namespace std;

int main() {
    int *ptr1;
    *ptr1 = 7;
    int *ptr2;
    *ptr2 = ptr1; // or I have also tried *ptr2 = *ptr1
    cout << "pointer 2 is " << *ptr2 << endl;
}
在第二个示例中,如果您确保
ptr1
指向有效位置,例如

 int *ptr2 = ptr2; 

在这两个示例中,您都取消了对未初始化指针的引用,这是一种未定义的行为

对于指针分配问题,您可以直接分配:

#include <iostream>
using namespace std;

int main() {
    int *ptr1;
    *ptr1 = 7;
    int *ptr2;
    *ptr2 = ptr1; // or I have also tried *ptr2 = *ptr1
    cout << "pointer 2 is " << *ptr2 << endl;
}
在第二个示例中,如果您确保
ptr1
指向有效位置,例如

 int *ptr2 = ptr2; 

这里使用指针的方式存在一个主要问题。直接取消引用指针可能会导致usr和barak建议的未定义行为

您需要在此处使用为指针分配内存

int x;
int *ptr1 = &x; /* ptr1 now points to the address of x */
*ptr1 = 7;
int *ptr2;
ptr1 = ptr2;
此外,由于您是分配内存的人,因此需要在退出之前进行清理

int* ptr1 = new int[1];
如果您不希望使用动态内存分配,可以将其初始化为

delete[] ptr1;
这样,您就不会去引用散乱的指针并导致未定义的行为

关于您的输出与

int a = 7;
int* ptr1 = &a;
< C++或C中的值赋值是从右向左的,因此PtR2将不具有PTR1;

的值。 比如,

 *ptr1 = ptr2; // or I have also tried *ptr1 = *ptr2
将使
a=6

相反地

int a  = 5;
int b = 6;

a=b;

将使
b=5

此处使用指针的方式存在一个主要问题。直接取消引用指针可能会导致usr和barak建议的未定义行为

您需要在此处使用为指针分配内存

int x;
int *ptr1 = &x; /* ptr1 now points to the address of x */
*ptr1 = 7;
int *ptr2;
ptr1 = ptr2;
此外,由于您是分配内存的人,因此需要在退出之前进行清理

int* ptr1 = new int[1];
如果您不希望使用动态内存分配,可以将其初始化为

delete[] ptr1;
这样,您就不会去引用散乱的指针并导致未定义的行为

关于您的输出与

int a = 7;
int* ptr1 = &a;
< C++或C中的值赋值是从右向左的,因此PtR2将不具有PTR1;

的值。 比如,

 *ptr1 = ptr2; // or I have also tried *ptr1 = *ptr2
将使
a=6

相反地

int a  = 5;
int b = 6;

a=b;

将使
b=5

此示例有效,
-您很幸运。
ptr1
没有指定指向的内存地址。您需要使用
new
分配内存
此示例有效,
-您很幸运。
ptr1
没有指定指向的内存地址。您需要使用
new
要分配内存而不是
int*ptr1=new int[1];
可以使用
new int
而不是
int*ptr1=new int[1]
你可以使用
new int
谢谢你的时间和帮助。我还有一个问题,
int*ptr1=&x;
等于
int*ptr1;ptr1=&x;
对吗?谢谢你的时间和帮助。我还有一个问题,
int*ptr1=&x;
等于
int*ptr1;ptr1=&x;
对吗?