【发布时间】:2019-03-01 16:13:19
【问题描述】:
我从 C 编程语言开始,我对指针的初始化有疑问。我知道当我们声明一个指针时,我们正在为特定指针保留内存,但是这个指针可能指向我们不知道的 x 地址,关键是我可以这样做:
char * s = "Hi"; 但我不能这样做 double * f = 3; 所以我要“初始化”这个双指针是下一段代码:
double * d;
double x = 3;
d = &x;
这样我就可以将指针指向一个特定的内存位置,并具有我想要的初始值。
总结一下,我的疑问是:
1.- 有没有办法像 char 一样初始化 double/int 指针?
【问题讨论】:
-
我认为你能做的最好的就是在
x的声明之后声明指针。然后,您可以在声明时初始化指向&x的指针,例如double *d = &x; -
@TomKarzes 你知道为什么我写的 char 指针初始化有效吗,
char * s = "Hi";但double * f = 3;不行? -
字符串常量(在该上下文中)实际上是其元素类型为
char的数组。例如,"abc"的类型为char [4](第四个字符是终止空字符)。与类型为int的字符常量'a'进行比较。 -
@TomKarzes 所以如果我理解正确,我为使用 char 指针初始化字符串而编写的语法是 C 的“特殊”语法,以便不初始化字符数组并初始化该数组将包含字符串的字符
-
字符串声明基本上是在做指针赋值。在该上下文中,字符串常量降级为
char *。您可以将这些视为作业。您可以将一个指针分配给另一个指针,或者将数组分配给指针(在这种情况下,数组降级为指针),但您不能将整数分配给指针。如果您可以编写{3.0}并让它隐式创建一个初始化为{3.0}的double [1]数组,那么这将起作用,但C 仅在用于初始化数组时支持它。字符串常量在这方面是特殊的。