널문자 질문입니다..^^

xeon007의 이미지

질문이 많내요.^^

(char)0;

(char *)0;

둘다 널 문자로 인식하던데..

정확히 어떤 차이가 있는지 알려주세요.^^

espereto의 이미지

(char)0 은 1바이트짜리, -128~127 범위를 가지는 char 타입의 정수로서 0.

(char*)0 은, (char 타입 데이터가 있는 곳을 가리키는) 포인터로서 NULL 포인터, 일반적으로 32bit 입니다.
64비트 머신이라면 64비트일 수도 있고, 16비트 머신이라면 16비트일 수도 있습니다.
포인터는 메모리상의 특정 영역(주소)을 나타내는 것이지만, NULL 포인터는 아무 것도 가리키지 않는 포인터가 됩니다(?).

문자열에 쓰이게 된다면 둘 다 NULL 문자로 인식되겠습니다만, 까다로운 컴파일러라면 경고 내지는 오류 메시지를 띄울겁니다.

lsj0713의 이미지

전자는 char형 정수 0을 의미합니다.

후자는 char *형 널 포인터를 의미합니다.

정수 0은 포인터형의 변수에 대입되거나 포인터형으로 캐스팅이 될 때 널 포인터가 된다고 C 언어상에서 약속이 되어 있습니다.

대부분의 컴파일러에서 널 포인터는 내부적으로 주소 0번을 가리키지만 오래된 몇몇 시스템에서는 널 포인터 주소값이 0이 아닌 경우도 있었다고 합니다. 그러나 이런 시스템의 C 컴파일러라도 표준을 따른다면 char *p = 0;이라 했을 때 p는 무조건 널 포인터 값이 저장된 변수가 되어야 합니다. 이것은 마치 개행문자가 '\r\n'인 환경에서도 printf 함수로 '\n' 문자만 출력하면 자동으로 '\r\n'을 출력해주는 것과 비슷하다 할 수 있습니다.

웬만하면 널 포인터와 널 문자는 정확히 구분해서 사용하는 것이 좋습니다. 널 문자가 들어갈 곳에 NULL 매크로 상수를 사용한다던가 널 포인터가 사용될 곳에 '\0'을 사용한다던가 하는 일은 피하는 것이 좋지요. 또한 변수에 대입을 할 때 = 기호 양쪽의 데이터형을 맞추는 것은 기본 중의 기본입니다. 된다고 안심할 일이 절대로 아니죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.