0

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

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)
4

2 回答 2

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

len是一个int。为了更改它,您需要func()使用该值的地址进行调用intpBuf是一个指针。要更改它指向的地址,您需要func()使用该指针的地址进行调用。

于 2014-09-25T06:45:23.870 回答
0

您正在int用单指针捕获地址并用单指针捕获地址pointer。这是问题。在函数中,改变*pBufas**pBuf**pBufas***pBuf等等。

于 2014-09-25T07:36:59.520 回答