programing

오류: 'unary *'의 잘못된 형식 인수('int'가 있음)

goodsources 2023. 9. 18. 21:18
반응형

오류: 'unary *'의 잘못된 형식 인수('int'가 있음)

C 프로그램이 있습니다.

#include <stdio.h>
int main(){
  int b = 10;             //assign the integer 10 to variable 'b'

  int *a;                 //declare a pointer to an integer 'a'

  a=(int *)&b;            //Get the memory location of variable 'b' cast it
                          //to an int pointer and assign it to pointer 'a'

  int *c;                 //declare a pointer to an integer 'c'

  c=(int *)&a;            //Get the memory location of variable 'a' which is
                          //a pointer to 'b'.  Cast that to an int pointer 
                          //and assign it to pointer 'c'.

  printf("%d",(**c));     //ERROR HAPPENS HERE.  

  return 0;
}    

컴파일러에서 오류가 발생합니다.

error: invalid type argument of ‘unary *’ (have ‘int’)

누가 이 오류가 무엇을 의미하는지 설명해 줄 수 있습니까?

부터c정수 포인터의 주소를 보유하고 있습니다. 그 유형은 다음과 같습니다.int**:

int **c;
c = &a;

전체 프로그램은 다음과 같습니다.

#include <stdio.h>                                                              
int main(){
    int b=10;
    int *a;
    a=&b;
    int **c;
    c=&a;
    printf("%d",(**c));   //successfully prints 10
    return 0;
}

베어본 C 프로그램은 위의 오류를 발생시킵니다.

#include <iostream>
using namespace std;
int main(){
    char *p;
    *p = 'c';

    cout << *p[0];  
    //error: invalid type argument of `unary *'
    //peeking too deeply into p, that's a paddlin.

    cout << **p;    
    //error: invalid type argument of `unary *'
    //peeking too deeply into p, you better believe that's a paddlin.
}

ELI5:

선생님은 작은 상자 안에 반짝이는 둥근 돌을 넣어 학생에게 줍니다.주인은 이렇게 말합니다. "상자를 열고 돌을 치워라."그 학생은 그렇게 합니다.

그러자 주인은 이렇게 말합니다. "이제 돌을 열고 돌을 치워라."학생은 "돌 하나 못 열겠다"고 말했습니다.

그 후 그 학생은 깨달음을 얻었습니다.

코드를 다시 포맷했습니다.

오류가 다음 줄에 있습니다.

printf("%d", (**c));

수정하려면 다음으로 변경합니다.

printf("%d", (*c));

*는 주소에서 값을 검색합니다.**는 주소에서 다른 값의 값(이 경우 주소)을 검색합니다.

또한 ()는 선택 사항이었습니다.

#include <stdio.h>

int main(void)
{
    int b = 10; 
    int *a = NULL;
    int *c = NULL;

    a = &b;
    c = &a;

    printf("%d", *c);

    return 0;
} 

편집:

선:

c = &a;

다음으로 대체해야 합니다.

c = a;

그것은 포인터 'c'의 값이 포인터 'a'의 값과 같다는 것을 의미합니다.따라서 'c'와 'a'는 같은 주소('b')를 가리킵니다.출력은 다음과 같습니다.

10

편집 2:

더블 *을 사용하려면 :

#include <stdio.h>

int main(void)
{
    int b = 10; 
    int *a = NULL;
    int **c = NULL;

    a = &b;
    c = &a;

    printf("%d", **c);

    return 0;
} 

출력:

10

변수 유형을 선언한 후에는 동일한 유형으로 캐스트할 필요가 없습니다.글을 쓰시면 됩니다.a=&b;. 마침내, 당신은 당신이 그를c부정확하게당신이 그것을 다음의 주소로 지정했으므로.a,어디에a에 대한 포인터입니다.int, 당신은 그것을 에 대한 포인터로 선언해야 합니다.int.

#include <stdio.h>
int main(void)
{
    int b=10;
    int *a=&b;
    int **c=&a;
    printf("%d", **c);
    return 0;
} 

언급URL : https://stackoverflow.com/questions/5455866/error-invalid-type-argument-of-unary-have-int

반응형