在C语言中,使用指针将一个数组的索引与另一个数组交换
有人能帮我解决这个问题吗?我必须使用指针来交换数组的索引。这就是我创建的解决方案`在C语言中,使用指针将一个数组的索引与另一个数组交换,c,arrays,pointers,C,Arrays,Pointers,有人能帮我解决这个问题吗?我必须使用指针来交换数组的索引。这就是我创建的解决方案` double *swap_double_array_ptr(double *pi, int pos1, int pos2) { double *p = &pos1; double *q = &pos2; double aux=0; aux = *(pi + p); *(p + pi)
double *swap_double_array_ptr(double *pi, int pos1, int pos2) {
double *p = &pos1;
double *q = &pos2;
double aux=0;
aux = *(pi + p);
*(p + pi) = *(q+ pi);
*(q + pi) = aux;
}
编译器说操作数无效。有人能帮我吗?我不知道还有其他解决办法。请温柔一点,我是新手。
多谢各位
void swap_double_array_ptr(double *pi, int pos1, int pos2) {
double aux;
aux = *(pi + pos1);
*(pos1 + pi) = *(pi+ pos2);
*(pos2 + pi) = aux;
}
通过使用索引变量的地址,您做的都是错误的 您试图添加两个在c中未定义的指针
aux=*(pi+p)代码>pi+p
->不允许
总结并提供一些要点:-
- 不允许添加两个指针变量
- 允许减去两个指针变量。(偏移量计算)
由于它不返回任何内容,因此需要使函数的返回类型为void
通过使用索引变量的地址,您做的都是错误的
您试图添加两个在c中未定义的指针
aux=*(pi+p)代码>pi+p
->不允许
总结并提供一些要点:-
- 不允许添加两个指针变量
- 允许减去两个指针变量。(偏移量计算)
由于它不返回任何内容,因此您需要使函数的返回类型无效。首先,C中不允许使用指针加法。
。C中只允许使用指针减法。您正在尝试执行无效的pi+p
。首先,C中不允许指针加法
。C中只允许指针减法。您正在尝试执行无效的pi+p
void swap_double_array_ptr(double *pi, int pos1, int pos2) {
double aux= *(pi + pos1);
*(pos1 + pi) = *(pos2 + pi);
*(pos2 + pi) = aux;
}
否则
void swap_double_array_ptr(double *pi, int pos1, int pos2) {
*(pos1 + pi) += *(pos2 + pi);
*(pos2 + pi) = *(pos1 + pi)-*(pos2 + pi);
*(pos1 + pi) -= *(pos2 + pi);
}
否则
void swap_double_array_ptr(double *pi, int pos1, int pos2) {
*(pos1 + pi) += *(pos2 + pi);
*(pos2 + pi) = *(pos1 + pi)-*(pos2 + pi);
*(pos1 + pi) -= *(pos2 + pi);
}
在此表达式语句中添加两个指针的操作
aux = *(pi + p);
^^^^^^
在C中没有定义
此外,函数不返回任何内容,因此其返回类型应为void
看来你的意思是
void swap_double_array_ptr( double *pi, int pos1, int pos2 )
{
double aux = *(pi + pos1);
*(pi + pos1) = *(pi + pos2);
*(pi + pos2) = aux;
}
考虑到对于第二个和第三个参数,使用typesize\t
比使用typeint
要好得多,因为通常类型int
不足以存储数组的所有可能索引。在这个表达式语句中添加两个指针的操作
aux = *(pi + p);
^^^^^^
在C中没有定义
此外,函数不返回任何内容,因此其返回类型应为void
看来你的意思是
void swap_double_array_ptr( double *pi, int pos1, int pos2 )
{
double aux = *(pi + pos1);
*(pi + pos1) = *(pi + pos2);
*(pi + pos2) = aux;
}
考虑到对于第二个和第三个参数,使用typesize\t
比使用typeint
要好得多,因为通常类型int
不足以存储数组的所有可能索引。哦,好的,谢谢。哦,好的,谢谢。我查看了未定义行为的列表,我认为标准不允许添加指针+浮动\u nr
。你能指出ISO9899中的哪个地方被标记为未定义的吗?我怀疑它在默认情况下会转换为整数。@alinsoar--不太清楚为什么在这里显示指针和浮点数的加法,但这将是一种违反约束的行为:@alinsoar请参阅标准6.5.6加法运算符的一节,其中写道,不完成约束一节将导致未定义的行为。你能在ISO9899中指出这一点吗?你从哪里读到使约束失效是未定义的行为?我检查了未定义行为的列表,我认为标准不允许添加指针+浮动\u nr
。你能指出ISO9899中的哪个地方被标记为未定义的吗?我怀疑它在默认情况下会转换为整数。@alinsoar--不太清楚为什么在这里显示指针和浮点数的加法,但这将是一种违反约束的行为:@alinsoar请参阅标准6.5.6加法运算符的一节,其中写道,不完成约束一节将导致未定义的行为。你能在ISO9899中指出这一点吗?你从哪里读到,使约束无效是未定义的行为?第二个函数定义是错误的,至少因为使用浮点数的操作是不精确的。@VladFrommosco你是对的,但考虑到浮点数上的所有运算符都是近似的,而不是精确的,在某些情况下,这可能也很有用。@VladFromMosco您可以使用任何具有反转的运算符来代替加法,当然,在某些情况下,偏差会更大。第二个函数定义是错误的,至少是因为带有浮点数的运算不精确。@VladFromMosco您是对的,但考虑到浮点数上的所有运算符都是近似值,而不是精确值,这在某些情况下可能也很有用。@VladFrommosco您可以使用任何具有逆的运算符,当然,在某些情况下偏差会更大。