将指针传递给常量作为参数时发出问题

时间:2014-09-25 06:29:22

标签: c++ c cppcheck

在这个例子中,使用地址调用概念来检索函数调用中发生的所有数据更改...

main()

i)传递两个论点          i)int指针          ii)指向常数的指针 - >这不能改变它所持有的价值......

ii)在函数调用中更改int *的值并将一些值赋给const void *。

*最后我试图打印main()

中的值

*正确获取int指针值(无问题)

*将void指针值设为NULL ..

要求:

需要像这样main()获取输出

main :: ajskdffllagkdjdjdhdjhd(我的意思是说我需要打印像这样的void *值)

但我得到的值为main :: NULL

为了获得预期的输出,我需要做些什么?

#include <stdio.h>
#include <stdlib.h>

void func(int *len,const void *pBuf);
void func2(int **len,const void **pBuf);
void func3(int ***len,const void ***pBuf);
int main()
{
        int len = 0;
        const void *pBuf;
        printf("len b4 ::%d\n",len);
        printf("%p\n",&pBuf);
        func(&len,&pBuf);
        printf("len after::%d\n",len);
        printf("%p\n",&pBuf);
        printf("main::%s\n",(const char *)pBuf);
        return 0;
}

void func(int *len,const void *pBuf)
{
        *len = 20;
        printf("func1 :: %p\n",&pBuf);
        func2(&len,&pBuf);
}

void func2(int **len,const void **pBuf)
{
        printf("func2::%p\n",&pBuf);
        **len = 30;
        func3(&len,&pBuf);
}

void func3(int ***len,const void ***pBuf)
{
        const void *pMy = "ajskdffllagkdjdjdhdjhd";
        **pBuf = pMy;
        printf("func3::%p\n",&pBuf);
        printf("func3::%s\n",(const char *)**pBuf);
        ***len = 40;
}

Output:

len b4::0
0x7fffa9c51468
func1 :: 0x7fffa9c51440
func2::0x7fffa9c51420
func3::0x7fffa9c513f0
func3::ajskdffllagkdjdjdhdjhd
len after::40
0x7fffa9c51468
main::(null)

2 个答案:

答案 0 :(得分:0)

你是正确的字符串文字。遗憾。

但是,您需要更改pBuf指向的地址:

void func(int *len,const void **pBuf)
{
    *len = 20;
    printf("func1 :: %p\n",pBuf);
    func2(&len,&pBuf);
}

void func2(int **len,const void ***pBuf)
{
    printf("func2::%p\n",pBuf);
    **len = 30;
    func3(&len,&pBuf);
}

void func3(int ***len,const void ****pBuf)
{
    const void *pMy = "ajskdffllagkdjdjdhdjhd";
    ***pBuf = pMy;
    printf("func3::%p\n",&pBuf);
    printf("func3::%s\n",(const char *)***pBuf);
    ***len = 40;
}

lenint。要更改它,您需要使用func()值的地址调用intpBuf是一个指针。要更改指向的地址,您需要使用该指针的地址调用func()

答案 1 :(得分:0)

您正在使用单个指针捕获int的地址,并使用单个指针捕获pointer的地址..这是问题。在函数中,将*pBuf更改为**pBuf,将**pBuf更改为***pBuf,依此类推。