我写了以下代码。它应该交换两个变量的值...但是,一旦我编译代码,它就会显示swap.exe已停止工作...
为什么它不起作用?
#include<cstdio>
#include<iostream>
using namespace std;
void swap(int *x, int *y)
{
int *temp;
*temp=*x;
*x=*y;
*y=*temp;
}
int main()
{
int i=5,j=10;
swap(&i,&j);
cout<<i<<" "<<j<<endl;
return 0;
}
如何解决这个问题? 我的代码出了什么问题?
答案 0 :(得分:4)
更改为
void swap(int *x, int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
如果要交换两个int
,为什么要使用指向int
的指针作为临时变量?使用相同的类型。
答案 1 :(得分:3)
因为temp
是一个悬空指针,所以访问*temp
是未定义的行为。
您可以使用int temp;
和temp = *x; ...
,或只使用std::swap
。
答案 2 :(得分:3)
它不起作用,因为您将x
的内容复制到未初始化指针(temp
)指向的位置。
如果您只想交换x
和y
的内容,可以使用std::swap(*x, *y)
。
答案 3 :(得分:2)
使用temp作为int而不是int *,如:
void swap(int *x, int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
答案 4 :(得分:0)
将WITH
MEMBER [Measures].[Closing Stock Date] AS
IIF
(
Ancestor
(
StrToMember
(
'[Date].[Retail].[Date].&[' + Format(Now(),'yyyy-MM-dd') + 'T00:00:00]'
)
,[Date].[Retail].CurrentMember.Level
)
IS
[Date].[Retail].CurrentMember
,StrToMember
(
'[Date].[Retail].[Date].&[' + Format(Now(),'yyyy-MM-dd') + 'T00:00:00]'
)
,ClosingPeriod
(
[Date].[Retail].[Date]
,[Date].[Retail].CurrentMember
)
).Name
SELECT
{[Measures].[Closing Stock Date]} ON COLUMNS
FROM
(
SELECT
{
[Date].[Retail].[Retail Period].&[Period 1, Ret 2014]
,[Date].[Retail].[Retail Period].&[Period 2, Ret 2014]
,[Date].[Retail].[Retail Period].&[Period 3, Ret 2014]
,[Date].[Retail].[Retail Period].&[Period 4, Ret 2014]
,[Date].[Retail].[Retail Period].&[Period 11, Ret 2014]
,[Date].[Retail].[Retail Period].&[Period 12, Ret 2014]
} ON COLUMNS
FROM [Retail]
)
WHERE
[Business Division].[Business Division].&[11];
声明为int类型变量,而不是指针。因为你只是将x的值存储在temp中,而不是指向x。