c语言的char 和char有什么具体区别给我一个完整可以运行的例子演示他们的区别
char[] 和 char* 的主要区别在于内存分配方式和使用方式。
char[] 是一种静态分配的方式,即在编译时就已经确定了它的大小,而且它会在栈内存中分配空间,因此它的大小是固定的。char[] 声明时需要指定数组的大小,例如:
char str[10] = "hello";
这里 str 是一个长度为 10 的字符数组,初始化时用字符串 "hello" 来填充。注意,数组的大小必须大于等于字符串的长度,以便存储字符串的每个字符和结尾的 '\0' 字符。
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 的字符,但是必须使用 strcpy() 函数来修改 str2 的值,因为它指向的是动态分配的内存。
最后,我们使用 free() 函数释放了 str2 指向的内存空间。
输出结果如下:
str1: hello
str2: world
str1: Hello
str2: World
可以看到,str1 是一个静态分配的字符数组,它的大小是固定的,我们可以直接修改它的值。而 str2 是一个动态分配的字符数组,它的大小是在运行时确定的,我们必须使用指针来访问它的值,并使用 malloc() 和 free() 函数来分配和释放内存空间
原文地址: https://www.cveoy.top/t/topic/e48n 著作权归作者所有。请勿转载和采集!