Ray*_*ter 1 c swap pointers c-preprocessor
所以我基本上试图创建一个交换两个t类型参数的SWAP(t,x,y)宏.当这两个参数形成时,我试图想到解决这个问题
v [i ++]和w [f(x)],即SWAP(int,v [i ++],w [f(x)]).
下面的代码基本上崩溃了......
#define SWAP(T,x,y) {T *p = x; T *q = y; T z = *p; *p = *q; *q = z;}
int f (int x){
return (0-x);
}
int main(void) {
int v[] = {1,2,3};
int i = 0;
int w[] = {4,5,6};
int x = -1;
int *p = v;
int *q = w;
SWAP(int*, v[i++],w[f(x)]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
什么想法可能会出错?
SWAP(int*, v[i++],w[f(x)]);
Run Code Online (Sandbox Code Playgroud)
v[i++]
是一个int
元素,但您将其分配给指针对象:
T *p = x;
Run Code Online (Sandbox Code Playgroud)
所以是当你提领p
在T z = *p;
你得到一个段错误.如果需要指向元素的指针,请使用&
运算符.
此外v[i++]
还有副作用(它会修改i++
),你不应该在宏调用中传递具有副作用的表达式.