我多次遇到声明char* ch = "hello";
。
我理解char* ch
告诉ch
是指向char
的指针。但是将你好分配给ch是什么意思?
我无法理解这一点?请帮忙。
答案 0 :(得分:4)
这意味着ch
是指向角色的指针。当您执行char* ch = "hello"
ch
时,将指向第一个字符,即字符h
。要指向第二个字符,您可以ch + 1
或ch[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......;