C指针算术回文

时间:2014-11-18 16:59:01

标签: c

我是一名正在学习指针和C的java学生。 我尝试使用单个数组和指针算法在C中制作一个简单的回文测试器。 我让它在没有循环的情况下工作(对于大小为10的数组的示例:*(test)== *(test + 9)是真的。 我的循环有问题。给我上学!

  #include<stdio.h>    

//function declaration
//int palindrome(int *test);

int main() 
{
    int output;
    int numArray[10] = {0,2,3,4,1,1,4,3,2,0};
    int *ptr;
    ptr = &numArray[0];
    output = palindrome(ptr);
    printf("%d", output);
}


//function determine if string is a palindrome
int palindrome(int *test) {    
    int i;
    for (i = 0; i <= (sizeof(test) / 2); i++) {    
        if (*(test + i) == *(test + (sizeof(test) - i)))    
            return 1;
        else 
            return 0;
    }
}

2 个答案:

答案 0 :(得分:0)

为什么要将指针复制到另一个变量中?

int *ptr;
ptr = &numArray[0];

只需将其发送给您的功能:

palindrome(numArray);

sizeof(test)给你一个指针的内存大小,这不是你想要的。你必须给出函数参数的大小。

int palindrome(int *test, int size){
...
}

最后,您的代码必须如下所示:

#include<stdio.h>

int palindrome(int *test, int size);

int main() 
{
    int output;
    int numArray[10] = {0,2,3,4,1,1,4,3,2,0};
    output = palindrome(numArray, 10);
    printf("%d", output);
}


//function determine if string is a palindrome
int palindrome(int *test, int size) {    
    int i;
    for (i = 0; i < size / 2; i++) {    
        if (*(test + i) != *(test + (size - 1) - i))
            return 0;
    }
    return 1;
}

答案 1 :(得分:0)

数组的名称本身将作为指向数组第一个元素的指针,如果松开指针,则无法访问数组的元素,因此您只能发送名称数组作为函数的参数。

在回文功能中:

你使用过sizeof(test)/ 2。会发生什么是地址被划分而没有意义,因此你不应该用它来计算mid元素。

无论存储的地址类型如何,

指针的大小都是相同的。