char s[] = "hello"; 和 char *s="hello" 有什么共同点不同点
时间: 2024-03-28 18:37:49 浏览: 136
五个不同类型的 Python爱心
`char s[] = "hello"` 和 `char *s = "hello"` 都可以用来表示一个字符串,但是它们有以下不同点:
1. 内存分配方式不同:`char s[] = "hello"` 定义了一个字符数组,编译器会在栈上为它分配足够的空间,将字符串 "hello" 复制到其中,并在末尾添加一个空字符 '\0'。而 `char *s = "hello"` 定义了一个字符指针,编译器会将字符串 "hello" 存储在只读数据段(read-only data segment)中,然后将这个字符串的地址赋值给指针 s。因此,`char s[] = "hello"` 的字符串内容可以被修改,而 `char *s = "hello"` 的字符串内容是只读的,不能被修改。
2. 大小不同:`char s[] = "hello"` 中定义的字符数组大小为 6(包括末尾的空字符 '\0'),而 `char *s = "hello"` 中定义的指针变量大小为指针的大小,通常为 4 或 8 个字节,具体取决于编译器和操作系统的位数。
3. 内存位置不同:`char s[] = "hello"` 中定义的字符数组存储在栈上,而 `char *s = "hello"` 中定义的字符串常量存储在只读数据段中。
4. 初始化方式不同:`char s[] = "hello"` 是通过数组初始化的方式来定义字符串,而 `char *s = "hello"` 是通过指针初始化的方式来定义字符串。
需要注意的是,虽然 `char *s = "hello"` 中定义的字符串常量是只读的,但是可以通过将它赋值给另一个字符数组或指针变量来实现对字符串内容的修改。但是这种做法可能会导致内存泄漏和未定义行为的问题,因此在实际开发中应该避免这种做法。
阅读全文