预期‘;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
Yes),这是一件非常常见的事情——如果在数组上应用运算符的地址,则会给出指向该数组的指针预期‘;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.
&
当应用于数组时,它不会被转换为指向它的第一个元素的指针。那么我们得到了什么呢
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)