预期‘;int*’;但参数的类型为‘;整数(*)[(长无符号整数)(n)]&x2019; #包括 无效转换(int*a1、int*n、int*a2); int main() { int n; printf(“输入数组的长度:”); scanf(“%d”和“&n”); int a1[n]; int a2[n]; int i; printf(“输入数组的元素:”); 对于(i=0;i

预期‘;int*’;但参数的类型为‘;整数(*)[(长无符号整数)(n)]&x2019; #包括 无效转换(int*a1、int*n、int*a2); int main() { int n; printf(“输入数组的长度:”); scanf(“%d”和“&n”); int a1[n]; int a2[n]; int i; printf(“输入数组的元素:”); 对于(i=0;i,c,pointers,C,Pointers,Yes),这是一件非常常见的事情——如果在数组上应用运算符的地址,则会给出指向该数组的指针 &当应用于数组时,它不会被转换为指向它的第一个元素的指针。那么我们得到了什么呢 inta[10]; &a将具有类型int(*)[10],这意味着它是指向包含10个元素的int数组的指针 如果您打算在将数组传递给其他函数时更改数组,只需传递数组本身。它将被转换为指向它所包含的第一个元素的指针。通过访问指针,您可以对其进行更改。因此,它可以达到此目的 在你的情况下,电话是 #include<stdio.

Yes),这是一件非常常见的事情——如果在数组上应用运算符的地址,则会给出指向该数组的指针

&
当应用于数组时,它不会被转换为指向它的第一个元素的指针。那么我们得到了什么呢

inta[10];
&a
将具有类型
int(*)[10]
,这意味着它是指向包含10个元素的
int
数组的指针

如果您打算在将数组传递给其他函数时更改数组,只需传递数组本身。它将被转换为指向它所包含的第一个元素的指针。通过访问指针,您可以对其进行更改。因此,它可以达到此目的

在你的情况下,电话是

#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[n];
    int a2[n];
    int i;

    printf("Enter the elements of the array: ");
    for(i=0; i<n; i++);
    {
       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 < a1+n)
    {
       *a2=(*a1+6)%10;
       a1++;
       a2++;
       p++;
    }
}
在这里,数组将被转换为指针类型,指针类型将是
int*
,这与
int(*)[]
不同。编译器发现不匹配,因此抱怨


在大多数情况下,数组会衰减为指向第一个元素的指针。(例外情况是将其用作
&
的操作数时,
等)


还有,在函数中比较指针的代码-您同时增加了
p
a1
,这使得您可以访问数组之外的位置-这是未定义的行为(在您的情况下,未定义的行为被证明是分段错误)。您应该像这样更改代码的这一部分:-

 convert(a1, n, a2);
或者干脆

memcpy(a2,a1,n*sizeof(*a1));
for(int i=0;i
是的,这是一件非常常见的事情——如果在数组上应用运算符的地址,则会给出指向该数组的指针

&
当应用于数组时,它不会被转换为指向它的第一个元素的指针。那么我们得到了什么呢

inta[10];
&a
将具有类型
int(*)[10]
,这意味着它是指向包含10个元素的
int
数组的指针

如果您打算在将数组传递给其他函数时更改数组,只需传递数组本身。它将被转换为指向它所包含的第一个元素的指针。通过访问指针,您可以对其进行更改。因此,它可以达到此目的

在你的情况下,电话是

#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[n];
    int a2[n];
    int i;

    printf("Enter the elements of the array: ");
    for(i=0; i<n; i++);
    {
       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 < a1+n)
    {
       *a2=(*a1+6)%10;
       a1++;
       a2++;
       p++;
    }
}
在这里,数组将被转换为指针类型,指针类型将是
int*
,这与
int(*)[]
不同。编译器发现不匹配,因此抱怨


在大多数情况下,数组会衰减为指向第一个元素的指针。(例外情况是将其用作
&
的操作数时,
等)


还有,在函数中比较指针的代码-您同时增加了
p
a1
,这使得您可以访问数组之外的位置-这是未定义的行为(在您的情况下,未定义的行为被证明是分段错误)。您应该像这样更改代码的这一部分:-

 convert(a1, n, a2);
或者干脆

memcpy(a2,a1,n*sizeof(*a1));
for(int i=0;i
我想你想要这个

for(int i = 0; i < n; i++)
    a2[i]=a1[i];
我想你想要这个

for(int i = 0; i < n; i++)
    a2[i]=a1[i];

数组不需要
运算符的地址。它们会自动转换为指向其第一个元素的poitner,相当于执行
和数组[0]
.Classic。对于
int a[N]
&a
a
有不同的类型。数组不需要
&
运算符的地址。它们会自动转换为第一个元素的poitner,相当于执行
&array[0]
。经典。对于
int a[N]
&a
a
有不同的类型。去掉“&”可以消除错误,谢谢。现在我得到一个分段错误(核心转储)错误。@AJP:请检查答案。再次删除错误消息,谢谢。尽管输出仍然存在问题,但我得到的似乎是随机数。至少我现在得到了一些信息:)@AJP:等等,你遵循了我答案中提供的任何解决方案吗?@AJP:
for(i=0;将“&”去掉会消除错误,谢谢。现在我得到一个分段错误(内核转储)错误。@AJP:检查答案。再次删除错误消息,谢谢。尽管输出仍然存在问题,但我得到的似乎是随机数。至少我现在得到了一些信息:)@AJP.:等等,您是否遵循了我的答案中提供的任何解决方案?@AJP.
for(i=0;i)