User table - user details
Post table - owned by a user
Friends table - a table that stores the link between people.
我不断收到期望'int asterix'的错误消息,但是对于& a1和& a2,参数类型为'int(asterix)[(long unsigned int)(n)]'。不知道为什么会这样做。该程序应该在数组中输入数字并取该数字加上6 mod 10然后输出转换后的数字。
答案 0 :(得分:2)
是的,这是非常常见的事情 - 如果在数组上应用运算符的地址将为您提供指向数组的指针。
&
应用于数组时,它不会转换为指向它的指针;第一个元素。那我们得到了什么?
int a[10];
&a
将具有类型int(*)[10]
,这意味着它是指向包含10个元素的int
数组的指针。
如果您打算在将数组传递给其他函数时更改数组,只需传递数组本身。它将被转换为指向它所包含的第一个元素的指针。通过访问指针,您可以对其进行更改。所以它就是为了这个目的。
在你的情况下,电话会是
convert(a1, n, a2);
这里数组将被转换为指针 - 其类型为int*
。,它与int (*)[]
不同。编译器发现不匹配,并抱怨。
在大多数情况下,数组衰减为指向第一个元素的指针。 (例外情况是将其用作&
,sizeof
等的操作数。
此外,您的函数中的代码会比较指针 - 您正在增加p
和a1
,这使您可以访问超出数组的位置 - 这是未定义的行为(在您的情况下,未定义的行为原来是分段错误)。你应该改变这部分代码: -
while(p < a1+n)
{
*a2=(*p+6)%10;
a2++;
p++;
}
但更好的是你可以做到这一点来复制整个事情
memcpy(a2,a1,n*sizeof(*a1));
或只是
for(int i = 0; i < n; i++)
a2[i]=a1[i];
答案 1 :(得分:0)
我想你想要这个!
#include<stdio.h>
void convert(int *a1, int n, int *a2);
int main()
{
int n;
printf("Enter the length of the array: ");
scanf("%d", &n);
int *a1 = new int[10];
int *a2 = new int[10];
int i;
printf("Enter the elements of the array: ");
for (i = 0; i<n; i++) // for (i = 0; i<n; i++); the ";" is expected
{
scanf("%d", (a1 + i));
}
convert(a1, n, a2);
printf("Output: ");
for (i = 0; i<n; i++)
printf("%d ", *(a2 + i));
printf("\n");
return 0;
}
void convert(int *a1, int n, int *a2)
{
int *p;
p = a1;
while (p + n > a1 ) //this is true for loop on array
{
*a2 = ((*a1) + 6) % 10; //**a1 + 6 have fault
a1++;
a2++;
//p++;
}
}
输入/输出:
Enter the length of the array: 5
Enter the elements of the array: 1
1
2
3
4
Output: 7 7 8 9 0