在将值分配给t
之前,是否必须在以下代码中初始化t
?代码是否正确?
void swap(int *x, int *y)
{
int *t;
*t = *x;
*x = *y;
*y = *t;
}
答案 0 :(得分:9)
您不需要指针开头:
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!
答案 1 :(得分:8)
以下代码部分是否正确?
Nopes!您的代码调用未定义的行为,因为您正尝试取消引用野生指针。
int *t;
*t=*x; // bad
试试这个
int t; // a pointer is not needed here
t=*x;
或者
int *t = x; // initialize the pointer
答案 2 :(得分:5)
该代码包含未定义的行为:
int *t;
*t=*x; // where will the value be copied?
除此之外没有意义 - 你需要一个临时变量来存储值,而不是指针。
int t; // not a pointer
t=*x;
*x=*y;
*y=t;
答案 3 :(得分:1)
指针是正确的。
只有引用需要在声明时初始化(或者在构造函数中为例如成员)。
编辑:但是你的代码中有错误,你不应该取消引用你的参数(即int *ptr = otherPtr;
没问题,而不是int *ptr = *otherPtr;
)
答案 4 :(得分:1)
如果您只想让指针指向已初始化的数据,则无需初始化它。但是,您可以使用其中一个malloc函数为整数分配足够的堆空间。
在C / C ++中进行交换的正确,有效的方法是
void swap(int *x, int *y) {
int *t = x;
x = y;
y = t;
}
答案 5 :(得分:1)
您可以找到正确的方法here
#include <stdio.h>
void swap(int *i, int *j)
{
int t;
t = *i;
*i = *j;
*j = t;
}
基本上这个原因已由sharptooth解释过,但是你会发现一些更多的细节和解释,当你进行这样的交换时背景会发生什么。希望有助于清除您的想法。
答案 6 :(得分:0)
int *t;
*t=*x;
t
未指向能够取消引用的任何有效位置。
在为指针t赋值之前,必须进行初始化。
是,初始化/分配指向有效的内存位置。否则它会指向哪里。它可能指向垃圾并导致取消引用上的未定义行为。