Tag: 交换

在c 中交换任何类型的两个变量

c中是否有任何逻辑可以交换任何类型的两个变量。 即int,float,字符序列。 我可以想到将每种类型的变量存储为characte序列并将其交换为普通字符串的逻辑,但我不是它的好主意。

使用XOR交换两个指针

我有一个关于使用XOR两个交换两个字符串文字的快速问题。 所以我有以下内容: #include #include #include void intSwap(int *a, int *b){ *a=*a^*b; *b=*a^*b; *a=*a^*b; } void swapString(char **a, char **b){ char *temp=*a; *a=*b; *b=temp; } void main(){ char *s= “ha”; char *t= “Oh”; printf(“%s and %s \n”,s,t); // prints ha Oh swapString(&s,&t); printf(“%s and %s \n”,s,t); // prints Oh ha int a=10; int b=5; printf(“%d %d\n”,a,b); […]

在函数中交换两个数组的指针

我正在编写一个没有复制部分的mergesort到一个额外的临时数组。 出于这个原因,我创建了一个辅助arraysaux int * aux aux = (int *) calloc(n, sizeof(int)); 其中n是数组的大小。 在函数合并中,我想通过使用指针继续我的算法来在最后交换两个数组。 但是,如果我交换指针,并将它们打印到控制台,我得到了奇怪的东西: 在方法本身内,指针被交换。 但是,如果我检查我的方法,回到我的主,指针不再交换。 调用我的合并方法: merge(a, lo, mid, hi, aux); 其中a是我的主arrays,辅助和lo , mid和hi是整数。 原型: void merge(int *a, int lo, int mid, int hi, int *aux); 我试图像这样交换它们: int temp; temp = a; a = aux; aux = temp; 你能帮我解决这个问题吗? 提前致谢!

交换char * array 导致问题

void sortArray(char* array[], int count){ int compare; int index; for(index = 0; index < count; index++){ //runs through array, keeping track of index for(compare = index; compare < count; compare++){ if (strcmp(array[compare] , array[index]) <= 0){ swap(*(array+compare), *(array+index)); } } } } void swap(char *strA, char *strB){ char *temp = (char *)malloc((strlen(strA)+1) * sizeof(char)); assert(temp!=NULL); […]

宏交换(t,x,y)交换类型为t的两个参数

所以我基本上试图创建一个交换两个t类型参数的SWAP(t,x,y)宏。 当这两个参数都是这种forms时,我试图想到解决这个问题 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 = […]

使用XOR交换值

这两个宏有什么区别? #define swap(a, b) (((a) ^ (b)) && ((a) ^= (b) ^= (a) ^= (b))) 要么 #define swap(a, b) (((a) ^ (b)) && ((b) ^= (a) ^= (b), (a) ^= (b))) 我在这里看到了第二个宏但是不明白为什么它不像第一个那样写? 我错过了一个特殊原因吗?

64位值的反转字节

我正在尝试为分配反转64位地址指针的字节并具有以下代码: char swapPtr(char x){ x = (x & 0x00000000FFFFFFFF) <> 32; x = (x & 0x0000FFFF0000FFFF) <> 16; x = (x & 0x00FF00FF00FF00FF) <> 8; return x; } 但是,它只是让一切都搞砸了。 但是,类似的function适用于64位长。 是否需要针对指针做一些不同的事情? 我正在进行函数调用的方式是一个问题吗? 对于指针: *(char*)loc = swapPtr(*(char*)loc); 很久了: *loc = swapLong(*loc);

有和没有辅助变量的可变交换 – 哪个更快?

我想你们都听说过“交换问题”; SO充满了关于它的问题。 不使用第三个变量的交换版本通常被认为更快,因为你有一个变量更少。 我想知道窗帘后面发生了什么,并编写了以下两个程序: int main () { int a = 9; int b = 5; int swap; swap = a; a = b; b = swap; return 0; } 和没有第三个变量的版本: int main () { int a = 9; int b = 5; a ^= b; b ^= a; a ^= b; return 0; } […]

字符串交换适用于char **但不适用于char *

在这个程序中,我交换了前两个名字 #include void swap(char **,char **); main() { char *name[4]={“amol”, “robin”, “shanu” }; swap(&name[0],&name[2]); printf(“%s %s”,name[0],name[2]); } void swap(char **x,char **y) { char *temp; temp=*x; *x=*y; *y=temp; } 这个程序运行得很完美但是当我使用function swap(char *,char *)它不会交换地址为什么? 为什么我必须使用指针指针?

你如何在矩阵中交换两行(在C中)?

例如,给定一个矩阵: 1 2 3 4 5 6 7 8 9 如果你是goint交换行[0]和行[1],结果矩阵将是: 4 5 6 1 2 3 7 8 9 你们能帮助我在C中获取代码吗?