C函数不工作
我是C语言编程新手,我尝试用一个函数来交换数组的变量,但我就是不能让它工作,我不知道为什么。你能帮帮我吗?先谢谢你 代码如下:C函数不工作,c,C,我是C语言编程新手,我尝试用一个函数来交换数组的变量,但我就是不能让它工作,我不知道为什么。你能帮帮我吗?先谢谢你 代码如下: #include <stdio.h> void inplace_swap(int *x, int *y){ if (x!=y){ *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y; } } void reverse_array(int a[], int
#include <stdio.h>
void inplace_swap(int *x, int *y){
if (x!=y){
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
}
void reverse_array(int a[], int cnt){
int first, last;
for (first = 0, last = cnt-1; first <= last; first++, last--)
inplace_swap(&a[first], &a[last]);
}
int main(){
//int eight = 80, seven = 70;
//inplace_swap(&eight, &seven);
//printf("New eight value is %d\n", eight);
//printf("New seven value is %d\n", seven);
int arr[5] = {1,2,3};
reverse_array(&arr[3], 2);
printf("%d\n", arr[1]);
//int i;
//for (i=0;i < 4;i++) {
// printf("%d\n", arr[i]);
//}
}
#包括
无效就地交换(int*x,int*y){
如果(x!=y){
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}
}
无效反向_数组(int a[],int cnt){
int首先,最后;
对于代码中的(first=0,last=cnt-1;first),似乎要交换数组中最后两个0,0的元素
您的5元素数组初始化为1,2,3,0,0
当您使用“第三个”元素(实际上是数组的第四个元素)的地址调用swap函数时,您基本上交换了数组的第四个和第五个元素,并实际打印了数组的第二个元素所有的注释和答案都需要理解,以便您了解自己犯了哪些错误。话虽如此,我重新编写了您的代码只是为了让它发挥作用。请研究差异并提出问题
#include <stdio.h>
/*** Prototypes - get in the habit of using them ***/
void inplace_swap(int *x, int *y);
void reverse_array(int *a, int cnt);
/***************************************************/
#define NUM_ELEMENTS(x) (sizeof(x)/sizeof(x[0]))
void inplace_swap(int *x, int *y)
{
if (*x!=*y)
{
printf("Doing swap...\n");
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
}
void reverse_array(int *a, int cnt)
{
int first, last;
for (first = 0, last = cnt-1; first <= last; first++, last--)
{
inplace_swap(&a[first], &a[last]);
}
}
int main()
{
int arr[] = {1,1,2};
reverse_array(arr, NUM_ELEMENTS(arr));
for ( int i = 0; i < NUM_ELEMENTS(arr); ++i )
{
printf("%d ", arr[i]);
}
printf("\n");
return(0);
}
#包括
/***原型-养成使用它们的习惯***/
无效就地交换(int*x,int*y);
无效反向_数组(int*a,int-cnt);
/***************************************************/
#定义NUM_元素(x)(sizeof(x)/sizeof(x[0]))
无效就地交换(int*x,int*y)
{
如果(*x!=*y)
{
printf(“进行交换…\n”);
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}
}
无效反向数组(int*a,int cnt)
{
int首先,最后;
对于(first=0,last=cnt-1;first此代码运行良好:
#include <stdio.h>
static void inplace_swap(int *x, int *y){
if( x != y ) {
*y = *x ^ *y;
*x = *x ^ *y;
*y = *x ^ *y;
}
}
static void print_array( int arr[], size_t count ) {
size_t i;
for( i = 0; i < count; ++i ) {
printf( "%s%d", i ? ", " : "", arr[i] );
}
printf( "\n" );
}
static void reverse_array( int a[], int cnt ) {
int first, last;
for( first = 0, last = cnt-1; first <= last; first++, last-- ) {
inplace_swap(&a[first], &a[last]);
}
}
int main() {
int arr[] = { 1, 2, 3, 4, 5 };
size_t count = sizeof(arr)/sizeof(arr[0]);
print_array ( arr, count );
reverse_array( arr, count );
print_array ( arr, count );
}
reverse\u array
函数工作正常,但在main中调用不正确:
你想要这个:
int main() {
int arr[] = { 1,2,3 };
reverse_array(arr, 3);
int i;
for (i=0;i < 3;i++) {
printf("%d\n", arr[i]);
}
}
如前所述,XOR交换是老式的,只适用于整数类型。您得到了什么结果?您尝试了什么,并使用了调试器?reverse\u array(&arr[3],2);
为什么要传递未显式初始化的元素的地址?除了上面的问题之外,您只打印arr
,printf(“%d\n”,arr[1]);
->for(int i=0;i<3;++i)printf(“%d\n”,arr[i]”
异或交换是20世纪80年代的事。使用临时变量,那么算法也可以处理浮点类型。如果只反转索引3和4(尚未初始化)的元素,然后在索引1处显示元素,您希望它显示什么?这是一个很好的答案。假设必须使用XOR
交换(这很可怕),而不是if(x!=y)
条件if(*x!=*y)
还将涵盖数据相同以及指针相同的情况。我会看一看,谢谢!你们的帮助很棒!@Diegobernaladelandatado是的,这是一些程序员使用的一个简洁的小“技巧”。这是定义函数的一种方式?35;定义NUM_元素(x)(sizeof(x)/sizeof(x[0])@DIEGOBERNALADELANTADO它叫做宏。非常感谢,错误在于调用数组。我修复了它,它工作正常!
int main() {
int arr[] = { 1,2,3 };
reverse_array(arr, 3);
int i;
for (i=0;i < 3;i++) {
printf("%d\n", arr[i]);
}
}
// here you declare an array of size 5 but you only initialize the first 3 elements
//This is not actually a problem in first place
int arr[5] = {1,2,3};
// &arr[3] is the address of 4th element of the array, which has not
// been initialized, This actually swaps arr[3] with arr[4]
reverse_array(&arr[3], 2);
// here you print the second element which has not been modified
// at all by the reverse_array(&arr[3], 2);
printf("%d\n", arr[1]);