【问题标题】:Obtaining value by dereferencing pointers通过解引用指针获取值
【发布时间】:2023-03-16 21:00:01
【问题描述】:
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) 

【问题讨论】:

    标签: c pointers dereference


    【解决方案1】:

    您已将它们全部声明为指向整数的指针,而它们应该是指向 intfloatchar 等的指针!

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

    【讨论】:

    • 哦!我的解释是它们都应该是整数,因为它们都指向一个内存地址?
    • 指针的本质是指向一个内存地址,但该内存地址的内容不一定是整数。
    【解决方案2】:

    这是正确的代码

    #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
    

    您必须在 printf 函数中使用正确的指针类型和格式说明符。

    或者如果你想要一个指向字符数组的指针,那么你可以写

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

    相应地

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

    【讨论】:

    • OP 希望第二组中的每个变量都是指向第一组中变量的指针。所以最后一个应该是char **,而不是char *
    • Xcode 回复 char **pCompanyName = &amp;companyName; 并警告“使用 'char()(20)' 类型的表达式初始化 'char *' 的指针类型不兼容”以及何时我运行代码,printf("companyName = %s\n", *pCompanyName ); 旁边出现错误,说“线程 1:EXC_BAD_ACCESS(code=EXC_I386_GPLFT)”。我不确定这两件事是什么意思。
    • @Justin O'Brien 哦,对不起。请参阅我更新的帖子。应该有 char ( *pCompanyName )[20] = &companyName;
    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多