0

この例では、関数呼び出しで発生しているすべてのデータ変更を取得するために、アドレスの概念による呼び出しを使用しています...

ではmain()

i) 2 つの引数を渡す 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()は、その値のアドレスで呼び出す必要がありintます。 pBufポインタです。func()それが指しているアドレスを変更するには、そのポインタのアドレスで呼び出す必要があります。

于 2014-09-25T06:45:23.870 に答える