将数字插入数组
我需要使用指针算术将其数字的每个数字总和插入数组中。不允许使用辅助阵列。
示例:
123, 456, 789
输出:
123, 6, 456, 15, 789, 24
代码:
#include <stdio.h>
int sum_of_digits(int n){
int sum=0;
while(n!=0){
sum=sum+n%10;
n/=10;
}
return sum;
}
void add(int *arr, int n)
{
int *p=arr, *y=arr+n*2-2,i;
while(p++<arr+n);
p-=2;
while(p>arr)
{
*y=*p;
*p=0;
p--;
y-=2;
}
p=arr;
while(p<arr+n*2)
{
*(p+1)=sum_of_digits(*p);
p+=2;
}
for(i=0;i<n;i++)
printf("%d ", arr[i]);
}
void main() {
int arr[20]={123, 456, 789},n=3;
add(arr,n*2);
}
这工作正确,但我不理解带有指针的代码部分。你能解释一下这是如何工作的吗?
I need to insert for every number sum of his digits in array using pointer arithmetic. Auxiliary arrays are not allowed.
Example:
123, 456, 789
Output:
123, 6, 456, 15, 789, 24
Code:
#include <stdio.h>
int sum_of_digits(int n){
int sum=0;
while(n!=0){
sum=sum+n%10;
n/=10;
}
return sum;
}
void add(int *arr, int n)
{
int *p=arr, *y=arr+n*2-2,i;
while(p++<arr+n);
p-=2;
while(p>arr)
{
*y=*p;
*p=0;
p--;
y-=2;
}
p=arr;
while(p<arr+n*2)
{
*(p+1)=sum_of_digits(*p);
p+=2;
}
for(i=0;i<n;i++)
printf("%d ", arr[i]);
}
void main() {
int arr[20]={123, 456, 789},n=3;
add(arr,n*2);
}
This works correct, but I don't understand the part of code with pointers. Could you explain me how this works?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我已经格式化了函数
add
并添加了一些注释来解释它,我希望他们能澄清发生了什么。请注意,
arr[i] == *(arr + i)
和*arr == arr[0]
I have formatted function
add
and added some comments to explain it, I hope they clarify what's happening.Note that
arr[i] == *(arr + i)
and*arr == arr[0]