1

我曾多次遇到过这种说法char* ch = "hello";

我知道这char* ch表明这ch是指向 a 的指针 char。但是将hello分配给 ch 是什么意思?

我无法理解这一点?请帮忙。

4

4 回答 4

4

这意味着ch是一个指向字符的指针。当您这样做时,char* ch = "hello" ch将指向第一个字符,即 character h。要指向第二个字符,您可以执行ch + 1ch[1]。请注意,理想的类型ch应该是const char*因为您不能写入指向的内存位置。

于 2011-06-30T06:28:02.730 回答
3

字符串文字静态存储在程序二进制文件中的某处。它们很可能被加载到内存中的只读“数据”部分,但这是未定义的行为。

分配字符串文字只是传递第一个字节的地址;在这种情况下,char* ch指向“hello”中的“h”。

注意:修改静态字符串是未定义的行为!虽然您可以获得指针,但任何分配都是危险的。

于 2011-06-30T06:31:49.460 回答
1

这里发生了几件事。

"hello"等于{ 'h', 'e', 'l', 'l', 'o', '\0' }。即,它是一个字符数组。数组可以隐式转换为相应的指针类型。所以这里的语句确实创建了一个(静态)字符数组,并将指向第一个元素的指针分配给变量ch(顺便说一下,命名不好)。

于 2011-06-30T06:34:58.840 回答
0

该语句编译为:

080483b4 <main>:
 80483b4:   55                      push   %ebp
 80483b5:   89 e5                   mov    %esp,%ebp
 80483b7:   83 ec 10                sub    $0x10,%esp
 80483ba:   c7 45 fc 94 84 04 08    movl   $0x8048494,-0x4(%ebp)
 80483c1:   c9                      leave  
 80483c2:   c3                      ret

0x8048494 处的字符串是“hello\0”,如 xxd 所示:

0000490: 0100 0200 6865 6c6c 6f00 0000 011b 033b  ....hello......;
于 2011-06-30T06:34:43.813 回答