一直让我感到困惑的一件事是字符指针。在漫长的四年之后,我再次徘徊在 c 中。
以上述案例为例。为什么char
指针会以这种方式表现?当指针指向任何内容时,我们如何直接寻址指针的内容,或者它就像 char 指针存储地址以外的东西!
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* charPtr="I cant understand why";
int* intPtr=60;
printf("%d\n", intPtr); //displays 60
printf("%p\n", intPtr); // displays the hex value of 60
printf("%s\n", charPtr); // displays the wh0le string
printf("%p\n", charPtr); // displays the start address of the string
return 0;
}
接下来是int
指针,它如何接受值 60 以及它存储在哪里?
撇开 char 指针和 malloc 不谈,我认为指针的基本思想是获取指向的地址!
为什么这些情况
*intptr = 60 ; // should be setting the pointee's value to 60
intptr = 60 ; // sets the address
抛出编译错误同时
int* intPtr=60;
在没有得到指针的情况下偷偷溜进来(或者是60作为地址,如果是这样,为什么在前一种情况下这是不可接受的)!
我想我在这里遗漏了一些东西,但是嘿!你猜怎么了 ?他们告诉我在 SO 中搜索!
编辑:将 char 指针指向的地址提供给 int 指针也不会引发错误!
int8_t* intPtr= (int8_t*)0x80485c8 ; // works without casting too ! I guess addresses are acceptable.
取消引用它会给出一个I
与字符串的第一个相等的值。这是一个好的做法还是存在任何其他解释这忽略了它们的字节位大小分配,例如 int 可以容纳一个 char 等等..?
正如 hmjd 指出的那样,“初始化语法”是问题所在!我编写自己的代码没有问题,但是在修改某人的代码时会出现问题!