C 语言 char[] 和 char* 的区别:完整代码示例
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;
}
代码解释:
- 声明了一个长度为 10 的
char[]数组str1,并用字符串 'hello' 初始化。 - 声明了一个
char*指针str2,并使用malloc()函数动态分配了一个长度为 10 的字符数组,并用字符串 'world' 初始化。 - 输出
str1和str2的值。 - 分别修改
str1和str2的第一个字符。 - 再次输出
str1和str2的值。注意,str1可以直接修改字符,而str2必须使用strcpy()函数修改值,因为它指向的是动态分配的内存。 - 使用
free()函数释放str2指向的内存空间。
输出结果:
str1: hello
str2: world
str1: Hello
str2: World
总结:
char[]是一个静态分配的字符数组,大小固定,可以直接修改字符。char*是一个动态分配的字符数组,大小在运行时确定,需要使用指针访问值,并使用malloc()和free()函数分配和释放内存空间。
选择 char[] 或 char* 取决于具体的需求,以及是否需要在运行时调整字符串的大小。
原文地址: https://www.cveoy.top/t/topic/n1Rm 著作权归作者所有。请勿转载和采集!