我是一名正在学习指针和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;
}
}
答案 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元素。
无论存储的地址类型如何,指针的大小都是相同的。