首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-26 
关于按指针传递的疑惑C/C++ code#include stdio.h#include string.hstatic char TmpBuf[32] abcd12

关于按指针传递的疑惑

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

这个应该可以!

热点排行