C 在函数中传递指针的重要性是什么?
为什么必须在lcs函数中传递指针X和Y?另外,当传递的不是指针而是数组时,会出现什么问题C 在函数中传递指针的重要性是什么?,c,pointers,longest-substring,C,Pointers,Longest Substring,为什么必须在lcs函数中传递指针X和Y?另外,当传递的不是指针而是数组时,会出现什么问题 #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
#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;
#包括
#包括
int max(int a,int b);
整数lcs(字符*X,字符*Y,整数m,整数n)
{
如果(m==0 | | n==0)
返回0;
如果(X[m-1]==Y[n-1])
返回1+lcs(X,Y,m-1,n-1);
其他的
返回最大值(lcs(X,Y,m,n-1),lcs(X,Y,m-1,n));
}
最大整数(整数a,整数b)
{
返回(a>b)?a:b;
}
int main()
{
字符X[]=“AGGTAB”;
字符Y[]=“GXTXAYB”;
int m=strlen(X);
int n=strlen(Y);
printf(“LCS的长度为%d”,LCS(X,Y,m,n));
返回0;
}每当您将数组传递给函数时,它都会转换为指向其第一个元素的指针。由于它包含使用它的第一个元素的地址,我们可以从另一个函数更改数组。这称为阵列衰减。即使您不想更改数组,它也会转换为指针 总而言之,如果不经过对指针的转换,就不可能传递数组。这就是你在这里看到的。根据C11标准(N1570),我们还可以引用:- § 除非它是
sizeof
运算符的操作数、\u Alignof
运算符或一元&
运算符,或者是用于初始化数组的字符串文字,将类型为“类型的数组”的表达式转换为类型为“指向类型的指针”的表达式,该表达式指向数组对象的初始元素,并且不是左值。如果数组对象具有寄存器存储类,则行为未定义