我已经阅读了很多关于这方面的帖子和问题,并阅读了很多答案,但仍然难以理解它们之间的区别以及何时应该使用哪个?
我认为当您需要存储数据且不知道其大小因为它是动态的时,应该使用char*。此外,我不确定是否正确,但从我所了解的来看,如果您声明一个char*并将其赋值为文字文本,例如: char *ch = "hi"; 它是一个常量,您无法更改它,如果尝试更改它,则只会将ch指向另一个分配的内存空间,其中包含新字符串? 如果按照以下方式编写: char ch = malloc(20); 那么您可以更改值 并且如果您这样做: char ch[] = "hi"; char pch = ch; 您也可以更改值,因为您指向数组,数组指向ch[0]?
所有加粗的内容都是我通过阅读得出的理解,虽然我可能对我刚才说的大部分内容都错误,这就是为什么我需要一个真正好的简单解释,以便我最终能够理解它们之间的区别以及何时应该使用哪个。
编辑:
我认为当您需要存储数据且不知道其大小因为它是动态的时,应该使用char*。此外,我不确定是否正确,但从我所了解的来看,如果您声明一个char*并将其赋值为文字文本,例如: char *ch = "hi"; 它是一个常量,您无法更改它,如果尝试更改它,则只会将ch指向另一个分配的内存空间,其中包含新字符串? 如果按照以下方式编写: char ch = malloc(20); 那么您可以更改值 并且如果您这样做: char ch[] = "hi"; char pch = ch; 您也可以更改值,因为您指向数组,数组指向ch[0]?
所有加粗的内容都是我通过阅读得出的理解,虽然我可能对我刚才说的大部分内容都错误,这就是为什么我需要一个真正好的简单解释,以便我最终能够理解它们之间的区别以及何时应该使用哪个。
编辑:
#include <stdio.h>
main()
{
char ch[] = "Hello";
char *p1 = ch;
char *p2 = p1;
char *p3 = *p1;
printf("ch : %s\n", ch);
printf("p1 address [%d] value is %s\n", p1, *p1);
printf("p2 address [%d] value is %s\n", p2, *p2);
printf("p3 address [%d] value is %s\n", p3, *p3);
return 0;
}