可以使用char指针来操作它指向的char数组吗?

时间:2014-10-01 11:36:28

标签: c pointers

我只是创建一个char数组str.later我做了char *p只是指向它,我可以从开始到结束访问(旅行)str,我可以操纵{{1}使用str,意味着 p(其中i:有效索引,x:任何字符)有效吗?实际上我试过它它正在工作,我的问题是没有必要使用malloc给它内存(即p = malloc(l * sizeof(char));)。

p[i]='x';

2 个答案:

答案 0 :(得分:1)

在这种情况下,不需要为p分配内存。当你执行str时,内存在char str[20];的堆栈上分配。完成p=str;后,pstr都指向堆栈上的相同内存地址。只要str在范围内,strp都可以用来操作它们共享的内存地址的值。因此p[1]='x';str[1]='x';是等效的。

但是要小心,如果在p范围之后保持str的值,并尝试使用它,则会出现未定义的行为。当str离开作用域时,将释放内存,p将指向堆栈上可能被其他内容使用的地址。使用p可能无法获得您想要的内容,对p进行更改可能会干扰不相关的值。

执行p=malloc(l*sizeof(char));在堆上分配新内存。由于它在堆上负责释放此内存,因此在处理退出分配范围时仍会分配它。

您可以在此处找到更多相关内容:What is the difference between char s[] and char *s in C?

答案 1 :(得分:0)

因为你只是替换p指向的字节的内容,所以你不需要为它分配新的内存。