t
在为 赋值之前,是否必须在以下代码中进行初始化t
?代码是否正确?
void swap(int *x, int *y)
{
int *t;
*t = *x;
*x = *y;
*y = *t;
}
t
在为 赋值之前,是否必须在以下代码中进行初始化t
?代码是否正确?
void swap(int *x, int *y)
{
int *t;
*t = *x;
*x = *y;
*y = *t;
}
您不需要指针开头:
void swap(int *x,int *y)
{
int t; //not a pointer!
t=*x;
*x=*y;
*y=t;
}
int a = 10, b = 20;
swap( &a, &b); //<-----------note : Needed &
--
或者,您可能需要以下交换功能:
void swap(int & x,int & y) //parameters are references now!
{
int t; //not a pointer!
t=x;
x=y;
y=t;
}
int a = 10, b = 20;
swap(a,b); //<----------- Note: Not needed & anymore!
以下代码部分是否正确?
不!您的代码调用未定义的行为,因为您试图取消引用一个野指针。
int *t;
*t=*x; // bad
试试这个
int t; // a pointer is not needed here
t=*x;
或这个
int *t = x; // initialize the pointer
该代码包含未定义的行为:
int *t;
*t=*x; // where will the value be copied?
除此之外,它没有任何意义——你需要一个临时变量来存储值,而不是指针。
int t; // not a pointer
t=*x;
*x=*y;
*y=t;
你可以在这里找到正确的方法
#include <stdio.h>
void swap(int *i, int *j)
{
int t;
t = *i;
*i = *j;
*j = t;
}
基本上,sharptooth 已经向您解释了原因,但是您会在那里找到更多细节和解释,了解当您进行此类交换时在后台会发生什么。希望它有助于清除您的想法。
对于指针来说是正确的。
只有引用需要在声明时初始化(或在实例成员的构造函数中)。
编辑:但是你的代码中有错误,你不应该取消引用你的参数(即int *ptr = otherPtr;
很好,不是int *ptr = *otherPtr;
)
如果你只是想让你的指针指向已经初始化的数据,那么你不需要初始化它。但是,您这样做的方式是,是的,您想使用其中一个 malloc 函数来为整数分配足够的堆空间。
在 C/C++ 中进行交换的正确、有效的方法是
void swap(int *x, int *y) {
int *t = x;
x = y;
y = t;
}
int *t;
*t=*x;
t
没有指向任何可以取消引用的有效位置。
在将值分配给指针 t 之前是否必须进行初始化。
是的,初始化/分配指向一个有效的内存位置。否则它会指向哪里。它可能会指向垃圾并导致取消引用时未定义的行为。