2014-09-26 1 views
-1
int main(int argc, const char * argv[]) 
{ 

    int age = 40; 
    float gpa = 3.25f; 
    char grade ='A'; 
    double fun = 2.000043f; 
    char companyName[20] = "O'Brien Enterprises"; 

    int *pAge = &age; 
    int *pGpa = &gpa; 
    int *pGrade = &grade; 
    int *pFun = &fun; 
    int *pCompanyName = &companyName; 

    printf("Value of variables through pointers:\n"); 
    printf("age = %i\n", *pAge); 
    printf("gpa = %f\n",*pGpa); 
    printf("grade = %c\n", *pGrade); 
    printf("fun = %d\n", *pFun); 
    printf("companyName = %s\n", *pCompanyName); 


    return 0; 
} 

이 코드를 실행할 때 Xcode는 많은 경고와 오류로 응답합니다. age을 제외한 모든 변수에 대한 포인터를 선언하고 초기화 할 때 incompatible pointer types이라고 표시됩니다. 인쇄를 시도 할 때 age, format specifies a different type을 제외하고는 모두 표시됩니다. 왜 이런거야? 그래서 그들은이 int에 대한 포인터하는 float하는 char해야하는 반면 당신은 정수에 대한 포인터로 모두를 선언 한포인터를 참조 해제하여 얻는 값

Value of variables through pointers: 
age = 40 
gpa = 0.000000 
grade = A 
fun = -2147483648 
(lldb) 

답변

5

하고, 다음 코드를 실행할 때 나는 다음과 같은 결과를 얻을 수 있습니다로 에!

int *pAge = &age; 
float *pGpa = &gpa; 
char *pGrade = &grade; 
double *pFun = &fun; 
char **pCompanyName = &companyName; 
+0

char (*pCompanyName)[20] = &companyName; 

등을 쓸 수 있습니다! 나는 그들이 모두 메모리 주소를 지적했기 때문에 모두 정수가되어야한다는 해석 아래에 있었습니까? –

+0

포인터가 메모리 주소를 가리키는 것은 자연 스럽지만 그 메모리 주소에있는 것이 정수 일 필요는 없습니다. – Celada

0

여기에 올바른 코드를입니다

#include <stdio.h> 

int main(void) 
{ 
    int age = 40; 
    float gpa = 3.25f; 
    char grade ='A'; 
    double fun = 2.000043f; 
    char companyName[20] = "O'Brien Enterprises"; 

    int *pAge = &age; 
    float *pGpa = &gpa; 
    char *pGrade = &grade; 
    double *pFun = &fun; 
    char *pCompanyName = companyName; 

    printf("Value of variables through pointers:\n"); 
    printf("age = %i\n", *pAge); 
    printf("gpa = %f\n",*pGpa); 
    printf("grade = %c\n", *pGrade); 
    printf("fun = %f\n", *pFun); 
    printf("companyName = %s\n", pCompanyName); 


    return 0; 
} 

출력 당신은 printf 함수에 포인터 유형과 형식 지정 corect를 사용할 필요가

Value of variables through pointers: 
age = 40 
gpa = 3.250000 
grade = A 
fun = 2.000043 
companyName = O'Brien Enterprises 

입니다.

아니면 문자 배열에 대한 포인터를 갖고 싶어 당신은 상응

printf("companyName = %s\n", *pCompanyName); 
+0

OP는 두 번째 그룹의 각 변수가 첫 번째 그룹의 변수와 동일한 포인터를 가리 키기를 원합니다. 그래서 마지막 것은'char ** '가 아니라'char **'이어야합니다. – Celada

+0

@Celada 감사합니다. 내 게시물을 업데이트했습니다. –

+0

Xcode는 "char (*) (20) '유형의 표현식과 함께"char **를 초기화하는 호환되지 않는 포인터 유형 "이라는 경고와 함께'char ** pCompanyName = & companyName; '으로 응답하고 코드를 실행할 때 오류가 발생합니다 'thread 1 : EXC_BAD_ACCESS (code = EXC_I386_GPLFT)'를 말하는'printf ("companyName = % s \ n", * pCompanyName); 옆에 나타납니다. 나는이 중 어떤 것이 의미하는지 확신 할 수 없다. –

관련 문제