C 语言 char[] 和 char* 的区别:完整代码示例

char[]char* 在 C 语言中都是用于存储字符串的常见方式,但它们在内存分配和使用方式上存在关键区别。

char[]:静态分配

char[] 是一种静态分配的方式,意味着数组的大小在编译时就已经确定,并在栈内存中分配空间。这意味着 char[] 的大小是固定的,无法在运行时改变。

char str[10] = 'hello';

在这个例子中,str 是一个长度为 10 的字符数组,并用字符串 'hello' 初始化。数组的大小必须大于等于字符串的长度,以容纳字符串的每个字符以及结尾的 '\0' 字符。

char*:动态分配

char* 是一种动态分配的方式,意味着数组的大小在运行时才能确定,并在堆内存中分配空间。char* 的声明类似于指针的声明。

char* str = 'hello';

在这个例子中,str 是一个指向字符数组的指针,指向字符串 'hello' 的首地址。指针不需要指定数组的大小,因为它可以指向任何大小的字符数组。

代码示例

以下代码示例演示了 char[]char* 在操作字符串时的区别:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char str1[10] = 'hello';
    char* str2;

    str2 = (char*)malloc(10 * sizeof(char));
    strcpy(str2, 'world');

    printf('str1: %s\n', str1);
    printf('str2: %s\n', str2);

    str1[0] = 'H';
    str2[0] = 'W';

    printf('str1: %s\n', str1);
    printf('str2: %s\n', str2);

    free(str2);

    return 0;
}

代码解释:

  1. 声明了一个长度为 10 的 char[] 数组 str1,并用字符串 'hello' 初始化。
  2. 声明了一个 char* 指针 str2,并使用 malloc() 函数动态分配了一个长度为 10 的字符数组,并用字符串 'world' 初始化。
  3. 输出 str1str2 的值。
  4. 分别修改 str1str2 的第一个字符。
  5. 再次输出 str1str2 的值。注意,str1 可以直接修改字符,而 str2 必须使用 strcpy() 函数修改值,因为它指向的是动态分配的内存。
  6. 使用 free() 函数释放 str2 指向的内存空间。

输出结果:

str1: hello
str2: world
str1: Hello
str2: World

总结:

  • char[] 是一个静态分配的字符数组,大小固定,可以直接修改字符。
  • char* 是一个动态分配的字符数组,大小在运行时确定,需要使用指针访问值,并使用 malloc()free() 函数分配和释放内存空间。

选择 char[]char* 取决于具体的需求,以及是否需要在运行时调整字符串的大小。

C 语言 char[] 和 char* 的区别:完整代码示例

原文地址: https://www.cveoy.top/t/topic/n1Rm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录