声明的含义

时间:2011-06-30 06:25:51

标签: c pointers char c-strings

我多次遇到声明char* ch = "hello";

我理解char* ch告诉ch是指向char的指针。但是将你好分配给ch是什么意思?

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

这里发生了几件事。

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

答案 3 :(得分: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......;