2014-09-26 40 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。爲什麼是這樣?而在代碼運行時,因爲是我得到如下結果:通過取消引用指針獲取值

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

回答

5

您已經聲明它們作爲指向整數,而他們應該是一個指向int,一個float,一個char等上!

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

哦!我的解釋是,他們都被認爲是整數,因爲他們都指向一個內存地址? – 2014-09-26 19:13:50

+0

指針的本質是指向一個內存地址,但該內存地址處的內容不需要是整數。 – Celada 2014-09-26 19:23:35

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; 
} 

輸出是

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

你必須使用corect指針類型和格式說明在printf函數。

或者,如果你想有一個指向一個字符數組,那麼你可以寫

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

,並相應

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

OP希望第二組中的每個變量都是指向第一組中的變量等於的指針。所以最後一個應該是'char **',而不是'char *'。 – Celada 2014-09-26 19:36:01

+0

@Celada謝謝。我已更新我的帖子。 – 2014-09-26 19:40:27

+0

Xcode回覆'char ** pCompanyName =&companyName;',並警告「不兼容的指針類型正在初始化'char **',其表達式爲'char(*)(20)'」,當我運行代碼時出錯出現在'printf(「companyName =%s \ n」,* pCompanyName)旁邊;'說「線程1:EXC_BAD_ACCESS(code = EXC_I386_GPLFT)」。我不確定這些事情是什麼意思。 – 2014-09-26 22:57:57