关于按指针传递的疑惑
- C/C++ code
#include <stdio.h>#include <string.h>static char TmpBuf[32] = "abcd1234";void Mem_Get(char *Buf, int *pLen);void Mem_Get(char *Buf, int *pLen){ Buf = TmpBuf; *pLen = strlen(TmpBuf);}int main(void){ int Len; char *PrintBuf = NULL; Mem_Get(PrintBuf, &Len); printf("%s\t%d\n", PrintBuf, Len); return 0;}输出:
(null) 8
为什么是空的呢?
[解决办法]
这有什么奇怪的
PrintBuf是传值进去,PrintBuf本身的值并没有改变
[解决办法]
基本数据类型都是按值传递的
[解决办法]
指针传值是拷贝指针指向TmpBuf[32],你代码的拷贝指针和原来的指针没关系
[解决办法]
假如你实参指向了TmpBuf[32];
你可以利用形参操作TmpBuf[32]这块空间 这样实参才会跟着变
[解决办法]
#include <stdio.h>
#include <string.h>
static char TmpBuf[32] = "abcd1234";
/*void Mem_Get(char *Buf, int *pLen)*/
void Mem_Get(char *Buf[], int *pLen)/*传参为指针数字, 这样值的改变能返回到实参*/
{
Buf[0] = TmpBuf;
*pLen = strlen(Buf[0]);
}
int main(void)
{
int Len;
char *PrintBuf[1];
Mem_Get(PrintBuf, &Len);
printf("%s\t%d\n", PrintBuf[0], Len);
return 0;
}
这个应该可以!