我想反转数组的数字, 但我不明白为什么它没有运行。
感谢您解释调试错误_运行时检查失败#2 -S
的含义。
谢谢
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5 };
int size, i, j;
int temp = 0;
size = sizeof(arr) / sizeof(arr[0]); //use this for changing size
printf("first_array :");
for (i = 0; i < size; i++)
{
printf("%d", arr[i]);
}
printf("\n");
for (i = 0; i <= (size / 2); i++)
{
j = size - i;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
printf("Riv_array :");
for (i = 0; i < size; i++)
{
printf("%d", arr[i]);
}
return 0;
}
最佳答案
在 C 中数组索引从 0 开始,并且您的数组有 5 个元素,因此 arr[4] 是最后一个元素,但您的代码:
j = size - i;
arr[j];
当i=0
访问arr[5]时,这是您的代码错误:数组索引越界。
您应该使用j = size - i-1;
来指向数组的最后一个元素,而不是j = size - i;
请参阅此工作示例(您的示例代码经过一些编辑):
#include <stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int size, i, j;
int temp = 0;
size = sizeof(arr) / sizeof(arr[0]); //use this for changing size
printf("first_array :");
for (i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
for (i = 0; i <= (size / 2); i++)
{
j = size - i - 1;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
printf("Riv_array :");
for (i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
使用指针反转数组的另一种方法:
#include <stdio.h>
void reverse(int* p, int count){
int temp;
int* q = p + count - 1; // point to the end
count /= 2;
while (count--) {
temp = *p;
*p++ = *q;
*q-- = temp;
}
}
void print_array(int *p, int count){
while (count--) printf("%d ", *p++);
printf("\n");
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int count = ((&arr)[1] - arr);
print_array(arr, count);
reverse(arr, count);
print_array(arr, count);
return 0;
}
输出:
1 2 3 4 5
5 4 3 2 1
关于C_(视觉)_调试错误_运行时检查失败#2 -S,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089452/