我现在一直在大学学习C几个月了,但是我错过了一个关于指针的讲座,所以我试着通过在线学习来弥补它,我以为我得到了它 - 但我偶然发现的东西是非常烦人的为了我.
我知道指针只包含他们指向的地址 - 例如,如果到目前为止我理解了所有内容,我有:
int *pointer;
int number = 30;
pointer = &number;
printf("Number at location: %d", *pointer);
Run Code Online (Sandbox Code Playgroud)
这应该没问题.我将变量号的地址分配给指针,然后通过解除引用指针并从地址获取实际值来最终打印它.令我恼火的是焦点指针.
我已经阅读了字符串数组/指针,所以我尝试了一些事情,当我注意到一些奇怪的东西(至少我的眼睛)发生了,也有int指针:
char* pointer;
char array[] = "Dingleberry";
pointer = array;
printf("%s\n", pointer);
return 0;
Run Code Online (Sandbox Code Playgroud)
我知道我不是直接分配地址,但是如果我没记错的话,使用数组,这不一定与指针结合 - 无论如何 - 这里的代码按预期工作,它打印出"Dingleberry".我现在的问题是......为什么?如果没有解除引用,指针不应只保存值的地址吗?如果我在这里取消引用,程序崩溃,它确实显示地址,如果我使用&虽然.
编译时我没有收到任何警告.此外,如果我使用它不应该工作:
printf("%c", pointer);
Run Code Online (Sandbox Code Playgroud)
只收到一封信?(我的意思是,尝试这确实显示了一个警告 - 但我有兴趣变得更好并排除我最有可能的愚蠢错误观念.)