CSDN:
- void my_set1(char in[32])
- {
- //int i = 0;
- memset(in,0x00,32);
- memcpy(in,"hello",5);
- return;
- }
- void my_set2(char *in)
- {
- in = (char*)malloc(32);
- memset(in,0x00,32);
- memcpy(in,"HELLO",5);
- return;
- }
- void my_set3()
- {
- char in[32] = {0x00};
- my_set1(in);
- printf(in);
- my_set2(in);
- printf(in);
- }
为什么运行my_set3()后得到的结果是hellohello,而不是helloHELLO,谁能来帮我分析一下?
首先,操作的都是指针。地址。
set1() 确实是在操作 in
set2():
void fun(int a)
{
a = b; 可以的 也就是说 a 当然可以左值。
}
这里就是, set2()中的 参数in 得到 传参后,又没有操作参数, 而是 重新 进行了 赋值。
set1() 一直操作的是 in
set2() 在 传参时候 得到in,然后 就 重新指向了新地址:malloc,接下来操作 得到的新地址。
这是根本原因! 重新指向了新地址。
追加:
my_set2()
中,in 其实没有真正赋值。
函数传参,是传值。 in 赋值是无效的。
若想对in赋值生效, 应该是 二维指针!
阅读(771) | 评论(0) | 转发(0) |