Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过解引用指针获取值_C_Pointers_Dereference - Fatal编程技术网

C 通过解引用指针获取值

C 通过解引用指针获取值,c,pointers,dereference,C,Pointers,Dereference,当我运行这段代码时,Xcode会回复大量警告和错误。当声明和初始化除age之外的所有变量的指针时,会显示不兼容的指针类型。当试图打印出来时,它会告诉所有人,除了年龄,格式指定了不同的类型。为什么会这样?当代码按原样运行时,我得到以下结果: int main(int argc, const char * argv[]) { int age = 40; float gpa = 3.25f; char grade ='A'; double fun = 2.000043

当我运行这段代码时,Xcode会回复大量警告和错误。当声明和初始化除
age
之外的所有变量的指针时,会显示
不兼容的指针类型
。当试图打印出来时,它会告诉所有人,除了
年龄
格式指定了不同的类型
。为什么会这样?当代码按原样运行时,我得到以下结果:

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

您已经将它们声明为指向整数的指针,而它们应该是指向
int
float
、char等的指针

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

这是正确的代码

int *pAge = &age;
float *pGpa = &gpa;
char *pGrade = &grade;
double *pFun = &fun;
char **pCompanyName = &companyName;
您必须在printf函数中使用corect指针类型和格式说明符

或者,如果希望有一个指向字符数组的指针,则可以编写

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

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

哦我的解释是,它们都应该是整数,因为它们都指向内存地址?指针的本质是指向内存地址,但是内存地址上的内容不需要是整数,OP希望第二组中的每个变量都是指向第一组中的变量等于什么的指针。所以最后一个应该是
char**
,而不是
char*
,警告“不兼容的指针类型正在使用类型为“char()(20)”的表达式初始化“char*”,当我运行代码时,
printf(“companyName=%s\n”,*pCompanyName)旁边会出现一个错误说“线程1:EXC\U坏访问(代码=EXC\U I386\U GPLFT)”。我不确定这两件事是什么意思。@Justin O'Brien噢,对不起。见我更新的帖子。应有char(*pCompanyName)[20]=&companyName;
char ( *pCompanyName )[20] = &companyName;
printf("companyName = %s\n", *pCompanyName );