例如:int arr[] = { 1, 3, 2, 3, 3, 4, 5, 3 }; 想在数组arr空间上直接修改
可以设两个临时变量来充当数组下标;
总结:开始时单步scr,des同时向右移,当scr遇到目标数字时,des 停下为了接受scr 遇到下一个不为目标数字的数字,当 scr 走到数组尽头时,结束。此时函数返回的是des(去掉目标数字后,数组的长度);
代码如下:
#include <stdio.h>
int remove(int *nums, int numssize, int val)
//形参分别是:目标数组,目标数组的长度,目标数字
{
int scr = 0, dst = 0;
while (scr < numssize)
{
if (nums[scr] == val)
{
scr++;
}
else
{
nums[dst] = nums[scr];
dst++;
scr++;
}
}
return dst;
}
int main()
{
int arr[] = { 1, 3, 2, 3, 3, 4, 5, 3 };
int sz = sizeof(arr) / sizeof(arr[0]);
int a = remove(arr, sz, 3);
for (int i = 0; i < a; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}