【发布时间】:2014-10-01 11:36:28
【问题描述】:
我只是创建了一个 char 数组 str。后来我创建了一个 char *p,它只是指向它,我可以从头到尾访问(旅行)str,我可以使用 p 操作 str , 方法
p[i]='x';(其中 i:有效索引,x:任何字符)有效??实际上我试过它正在工作,我的问题是是否不需要使用 malloc 给它内存(即 p=malloc(l*sizeof(char));)。
#include<stdio.h>
#include<string.h>
int main()
{
char str[20];
char *p;
scanf("%s",str);
printf("%s\n",str);
int l=(int)strlen(str);
// printf("l= %d\n",l);
//p=str;
//p=malloc(l*sizeof(char));
p=str;
int i;
for(i=0;i<l;++i)
printf("%c-",*(p+i));
printf("\nNow p=%s\n",p);
p[1]='x'; // it is valid , but difficult to understand?? we didnot give it memory,but it can manipulate the str as well.
printf("After changes made\n",p);
printf("p=%s\n",p);
printf("str=%s\n",str);
return 0;
}
【问题讨论】:
-
是的,这很好。
char str[20];分配 20 个字节,您使用p指向该分配。 -
我认为解释没有问题
*p必须指向有效内存。 -
p=str表示p持有char数组str的基地址。 -
p=str 表示我们 p 指向与 str 相同的地址。所以它只是指针,对吗??
-
是的。是指针。你现在有什么疑问?