有件事总是让我困惑,那就是字符指针。
四年后,我再次徘徊在 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 指出的那样,“初始化语法”是问题所在!我编写自己的代码没有问题,但修改别人的代码时就会出现问题!