C 通过解引用指针获取值
当我运行这段代码时,Xcode会回复大量警告和错误。当声明和初始化除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
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 );