专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

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

发布时间:2011-06-28 16:17:41 文章来源:www.iduyao.cn 采编人员:星星草
关于按指针传递的疑惑
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;
}

这个应该可以!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: