가장 첫번째 착각은 C언어 문법이 잘 정의된 문법이라고 가정하고 접근했다는것.C 문법은 수학개념따위는 쳐다도 안보고 만들었으니, 너무 엄밀하게 접근하면 안됨. (하스켈은 정말 잘 정의되어 있음)
레노미나(bugfree)2013-02-14 22:55
EXAMPLE 8 The declaration
char s[] = \"abc\", t[3] = \"abc\";
defines ‘‘plain’’ char array objects s and t whose elements are initialized with character string literals.
This declaration is identical to
char s[] = { \'a\', \'b\', \'c\', \'\\0\' },
t[] = { \'a\', \'b\', \'c\' };
The contents of the arrays are modifiable. On the other hand, the declaration
2414(61.252)2013-02-14 22:56
char *p = \"abc\";
defines p with type ‘‘pointer to char’’ and i
2414(61.252)2013-02-14 22:56
c표준에서도 그냥 기능이라고 설명하는데 깊게 생각해야겠나?
2414(61.252)2013-02-14 22:56
char a[] = \"good\" 의 해석은 , 두가지로 나누어 짐. 첫째, 초기화 값을 가지는 배열 a 를 선언하며 , 그 배열의 크기는 초기화 문자열의 크기로 결정된다. 둘째, 배열 a 의 초기화 값은 값 \"good\" 이다.(이값은 주소임) (ps. \"good\"의 더블쿼테이션 마크 연산자는 피연산자인 문자열을 데이터영역에 잡히도록 코드를 생성하고, 그 첫번째 주소를 반환한다.)
레노미나(bugfree)2013-02-14 23:00
char * p = \"good\" 의 해석은 두가지로 나우어지고, 첫째, 초기화 값을 가지는 포인터 변수 p 를 선언하며, 둘째 그 초기화 값은 연산자 더블쿼테이션 이 반환하는 주소이다.
레노미나(bugfree)2013-02-14 23:01
따라서 \'=\' 기호는 수학의 동등이나 대입의 뜻이 아니라(상수인 배열에 대입은 불가능) , 초기화 값을 정의하기 위한 수단으로 이해하면 된다.
레노미나(bugfree)2013-02-14 23:03
내가 c 언어를 재정의한다면, declare a , type is array of char , initial value is \'good\' ; declare p , type is pointer of character , initial value is \'good\'
레노미나(bugfree)2013-02-14 23:06
boost 라는 C++ 오픈소스 중에 10진수를 16진수로 고치는 코드가 이런식이더라구 \"0123456789ABCDEF\"[n%16]
마치 자바는 연산자 오버로딩이 안되는데 어떻게 되냐고 묻는거랑 같은거네
컴퓨터 구조 -> c언어 하는중인데 자바는 본적도 없으니 c의 논리를 설명해주세요.
구글링 한번 해보시지?
가장 첫번째 착각은 C언어 문법이 잘 정의된 문법이라고 가정하고 접근했다는것.C 문법은 수학개념따위는 쳐다도 안보고 만들었으니, 너무 엄밀하게 접근하면 안됨. (하스켈은 정말 잘 정의되어 있음)
EXAMPLE 8 The declaration char s[] = \"abc\", t[3] = \"abc\"; defines ‘‘plain’’ char array objects s and t whose elements are initialized with character string literals. This declaration is identical to char s[] = { \'a\', \'b\', \'c\', \'\\0\' }, t[] = { \'a\', \'b\', \'c\' }; The contents of the arrays are modifiable. On the other hand, the declaration
char *p = \"abc\"; defines p with type ‘‘pointer to char’’ and i
c표준에서도 그냥 기능이라고 설명하는데 깊게 생각해야겠나?
char a[] = \"good\" 의 해석은 , 두가지로 나누어 짐. 첫째, 초기화 값을 가지는 배열 a 를 선언하며 , 그 배열의 크기는 초기화 문자열의 크기로 결정된다. 둘째, 배열 a 의 초기화 값은 값 \"good\" 이다.(이값은 주소임) (ps. \"good\"의 더블쿼테이션 마크 연산자는 피연산자인 문자열을 데이터영역에 잡히도록 코드를 생성하고, 그 첫번째 주소를 반환한다.)
char * p = \"good\" 의 해석은 두가지로 나우어지고, 첫째, 초기화 값을 가지는 포인터 변수 p 를 선언하며, 둘째 그 초기화 값은 연산자 더블쿼테이션 이 반환하는 주소이다.
따라서 \'=\' 기호는 수학의 동등이나 대입의 뜻이 아니라(상수인 배열에 대입은 불가능) , 초기화 값을 정의하기 위한 수단으로 이해하면 된다.
내가 c 언어를 재정의한다면, declare a , type is array of char , initial value is \'good\' ; declare p , type is pointer of character , initial value is \'good\'
boost 라는 C++ 오픈소스 중에 10진수를 16진수로 고치는 코드가 이런식이더라구 \"0123456789ABCDEF\"[n%16]
코드가 맞을지는 모르겠지만, 여튼 저런식으로