在这个例子中,使用地址调用概念来检索函数调用中发生的所有数据更改...
在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)
答案 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;
}
len
是int
。要更改它,您需要使用func()
值的地址调用int
。
pBuf
是一个指针。要更改指向的地址,您需要使用该指针的地址调用func()
。
答案 1 :(得分:0)
您正在使用单个指针捕获int
的地址,并使用单个指针捕获pointer
的地址..这是问题。在函数中,将*pBuf
更改为**pBuf
,将**pBuf
更改为***pBuf
,依此类推。