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;
对吗?