[완료]포인터 참조.

puresupe의 이미지

char *array[]={"hello","world"};
printf("%s",*++array);

이렇게 하면 왜 에러가 날까요?
world를 출력하려고하는건데.

보통 파일 오픈할떄
fp = fopen(*++argv,"r")
이런식으로 쓰는데. 왜. 위에껀 안될까요?

참고로 *(array+1)은 되더라구요.

klara의 이미지

array는 포인터가 아니라 배열이름이니까요.
배열이름은 값을 변경시킬수 없습니다.
방금 테스트해보니까 gcc는 'error: lvalue required as increment operand'라면서 아예 컴파일조차 안되네요.
++argv는 아마 char *[]가 아니라 char **로 선언되던거 아닌가요?

puresupe의 이미지

*argv[] 이것과 **argv는 같은게 아니에요?

klara의 이미지

전자는 배열이고 후자는 포인터죠.

dg의 이미지

마찬가지로

void f(int array1[])
{
  ++array1;
}

는 되고
int array2[] = {1, 2, 3};
++array2;

는 안됩니다.

이유는...

array1은 함수의 인자로 선언되어서 int *array1 으로 선언된거랑 같지만
array2는 배열이기 때문에 array2 자체의 값은 바꿀수 없습니다.

klara의 이미지

함수인자일때는 포인터와 동일하다는건 몰랐네요.
그렇다면 main()으로 넘어오는 argv에 대해서는 char **든 char *[]든 동일하겠군요.

dg의 이미지

네.. 동일해요..

puresupe의 이미지

아. 그런거군요 :D

그런데
컴파일하면. 배열도 포인터로 바꾸는걸로 알고있거든요. 이를태면
int integer[5]={1,2,3,4,5};
printf("%d",0[integer]);
와 같은경우도. 어차피 배열도 컴파일되면 어셈블러로는 *(integer+1) 이렇게 바뀌는것처럼요.

위의 정수형같은경우도 지금해보니까. 같은 오류가 나네요.
아.. 포인터로 바뀌어도 unary operation은 안되나봐요.

오. 귀중한거 알았네요. 감사합니다 ㅎ

근데 왜안될까요? 위와같이 0[integer]에서처럼 배열이라도 포인터처럼 인식하면서.

klara의 이미지

이미 답은 적었습니다. 배열이름은 그 값을 바꿀수 없습니다.
++integer는 integer자체의 값을 바꾸는 것이기 때문에 안되는 거고, integer+1은 integer는 그대로두고, 거기에 +1한 결과를 돌려주는 것이죠.
전혀 다릅니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.