-1

为什么指针 X 和 Y 必须在 lcs 函数中传递?当传递数组而不是指针时,还有什么问题。

#include<stdio.h>
#include<string.h>

int max(int a, int b);

int lcs( char* X, char* Y, int m, int n )
 {
  if (m == 0 || n == 0)
  return 0;
  if (X[m-1] == Y[n-1])
  return 1 + lcs(X, Y, m-1, n-1);
else
  return max(lcs(X, Y, m, n-1), lcs(X, Y, m-1, n));
}

int max(int a, int b)
{
  return (a > b)? a : b;
}

int main()
 {
 char X[] = "AGGTAB";
 char Y[] = "GXTXAYB";

 int m = strlen(X);
 int n = strlen(Y);

 printf("Length of LCS is %d", lcs( X, Y, m, n ) );

 return 0;

}

4

1 回答 1

2

每当您将数组传递给函数时,它都会转换为指向其第一个元素的指针。由于它包含使用它的第一个元素的地址,我们可以从另一个函数更改数组。这被称为阵列衰减。即使您不想更改数组,它也会被转换为指针。

总而言之,如果不将数组转换为指针,就不可能传递数组。这就是你在这里看到的。从 C11 标准(N1570)我们也可以引用这个:-

§ 6.3.2.1p3

除非它是运算sizeof符、运算符_Alignof或一元&运算符的操作数,或者是用于初始化数组的字符串字面量,否则类型为 ''array of type'' 的表达式将转换为类型为 '' 的表达式指向类型''的指针,它指向数组对象的初始元素,不是左值。如果数组对象具有寄存器存储类,则行为未定义。

于 2018-02-18T02:34:27.687 回答