读书人

关于按指针传递的疑惑,该怎么解决

发布时间: 2012-03-26 15:46:56 作者: rapoo

关于按指针传递的疑惑

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;
}

这个应该可以!

读书人网 >C语言

热点推荐