이것이 제가 학습 기간 동안 찾은 것입니다 :
#include<iostream>
using namespace std;
int dis(char a[1])
{
int length = strlen(a);
char c = a[2];
return length;
}
int main()
{
char b[4] = "abc";
int c = dis(b);
cout << c;
return 0;
}
따라서 변수 int dis(char a[1])
에서는
사용할 수 있기 때문에 [1]
아무것도하지 않는 것으로 보이며 전혀 작동하지 않습니다 . 또는 처럼 . 배열 이름이 포인터이고 배열을 전달하는 방법을 알고 있으므로 내 퍼즐은이 부분에 관한 것이 아닙니다.a[2]
int a[]
char *a
내가 알고 싶은 것은 컴파일러 가이 동작 ( int a[1]
)을 허용하는 이유 입니다. 아니면 내가 모르는 다른 의미가 있습니까?
typedef
배열 유형 인 경우에도 적용됩니다 . 따라서 인수 유형의 "포인터에 대한 붕괴"는 구문 설탕으로 대체 []
되는 것이 아니라 *
실제로 유형 시스템을 통과합니다. 이는 va_list
배열 또는 비 배열 유형으로 정의 될 수있는 일부 표준 유형에 실제 결과를 초래 합니다.
int dis(char (*a)[1])
. 그런 다음 배열에 대한 포인터를 전달합니다 dis(&b)
. C ++에 존재하지 않는 C 기능을 기꺼이 사용하려는 경우 void foo(int data[static 256])
and와 같은 것을 말할 수는 int bar(double matrix[*][*])
있지만 다른 웜 수 있습니다.