我有一个关于将指针从function1
发送到function2
的问题,而function2
会更改该指针。
让我们看一看“自制的”strcpy
:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void strcopy(char* targ, char* src) {
while(*src) {
*targ = *src;
targ++;
src++;
}
*targ = 0;
}
int main() {
char* src = "this is aa string";
char* targ = malloc(strlen(src)*sizeof(*targ)+1);
strcopy(targ, src);
printf("'%s'\n", targ);
return 0;
}
输出
'this is aa string'
问题是:
为什么
targ
指向字符串的开头,尽管我们在函数中确实指向了targ++
?似乎我们是按值发送指针!!
有人能解释一下吗?谢谢。
最佳答案
当您将指针传递到函数中时,实际上是在传递指针的值,“targ”变量是main()函数中targ指针的副本。在strcopy()中递增它对原始指针没有影响。
按值传递变量时,实际上是在传递指向原始变量的隐藏指针,但在本例中,是将内存地址存储到堆栈上的新变量中。