오류: '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
'programing' 카테고리의 다른 글
mysql 대비 neo4j 성능 (어떻게 개선할 수 있습니까?) (0) | 2023.09.18 |
---|---|
하나의 선택기로 모든 태그를 대상으로 할 수 있습니까? (0) | 2023.09.18 |
BigDecimal to SQL NUMBER: 정밀도보다 큰 값 확인 (0) | 2023.09.18 |
부트스트랩 4 다중 선택 드롭다운 (0) | 2023.09.18 |
최근 게시물 워드프레스 위젯을 편집하여 3개 언어를 한 번에 표시하는 도움말 (0) | 2023.09.18 |