请问(char **)是什么意思

时间:2021-08-08 21:18:19

void *str_mid;是一个函数的参数
CString str[10];是一个CListCtl所选定的数据库中的数据

下面这个语句
((char **)str_mid)[i]=str[i].GetBuffer(0);
该语句中(char **)是什么意思呢?

14 个解决方案

#1


就是指针的指针...

int n = 0;

int **p = &(&n);

#2


指针的指针

#3


强制转换

#4


就是指针的指针... 
void *str_mid;是一个函数的参数
(char **)str_mid 就是把str_mid 强转成char **

例如
char *p ;//char 指针 ,表示p里面发一个char型变量的地址
char **p1;char *指针 ,表示p里面发一个char *型变量的地址
p1 = &p;

#5


str_mid本来是void *类型,将str_mid的类型加上(char **)进行强制转换再进行数组操作,
即((char **)str_mid)[i]是char*类型,正好与str[i].GetBuffer(0); 返回的类型相匹配

#6


对!指针的指针!

#7


指针是一个地址,也是一个变量
比如
char b='d';
char *c=b;
c是一个指针,c也是一个变量,c中存的是b的地址,*操作符可以取c变量中存的地址中存的数据,因为是char *,所以可以取出d。

char **是指向指针的指针
比如
char **cc=c;
cc是一个指针,cc也是一个变量,cc中存的是指针c的地址,*cc可以取出指针c中存储的地址(这个地址就是变量b的地址),**c就可以取出b中的元素d!

我的理解就是这样
有不对的楼下指出!

#8


upup~~~~

#9


请问(char **)是什么意思

#10


将str_mid)[i]强制转换为char型的二级指针。

#11


void *str_mid

这个参数应该要求的原始类型是 char**

在函数里面再转回来而已


比如




void fun(void *str_mid)
{
   for (int i = 0; i < 10; ++i)
       ((char **)str_mid)[i]=str[i].GetBuffer(0); 
}


int main()
{
   char* str_mid[10];

   fun(str_mid);

   return 0;
}

#12


各位楼上的说了这么多,lz一定明白了,看见了,也说两句:
所谓指针也是变量例char* p; ,只不过此变量存放的是一个地址值,而这个地址值存放的内容可以用*p 获得,
*p的内容可以是常量内容也可以是变量内容,我们通常就会说一个指针指向某个变量,就是这个意思了。
指针是变量,即是变量就有变量类型了,指针的内容为内存地址,所有的指针存放的都是地址值,区分类型就要靠这些地址值里存放的是什么类型的数据了……
char** pp; 就是二级指针,指向指针的指针,pp里存放的就是p的地址,p是一个char型指针,pp就是一个char型指针的指针。

#13


各位楼上的说了这么多,lz一定明白了,看见了,也说两句:
所谓指针也是变量例char* p; ,只不过此变量存放的是一个地址值,而这个地址值存放的内容可以用*p 获得,
*p的内容可以是常量内容也可以是变量内容,我们通常就会说一个指针指向某个变量,就是这个意思了。
指针是变量,即是变量就有变量类型了,指针的内容为内存地址,所有的指针存放的都是地址值,区分类型就要靠这些地址值里存放的是什么类型的数据了……
char** pp; 就是二级指针,指向指针的指针,pp里存放的就是p的地址,p是一个char型指针,pp就是一个char型指针的指针。

#14


二级指针

指向指针的指针

还有三级的...

char ***pp;

道理一样

#1


就是指针的指针...

int n = 0;

int **p = &(&n);

#2


指针的指针

#3


强制转换

#4


就是指针的指针... 
void *str_mid;是一个函数的参数
(char **)str_mid 就是把str_mid 强转成char **

例如
char *p ;//char 指针 ,表示p里面发一个char型变量的地址
char **p1;char *指针 ,表示p里面发一个char *型变量的地址
p1 = &p;

#5


str_mid本来是void *类型,将str_mid的类型加上(char **)进行强制转换再进行数组操作,
即((char **)str_mid)[i]是char*类型,正好与str[i].GetBuffer(0); 返回的类型相匹配

#6


对!指针的指针!

#7


指针是一个地址,也是一个变量
比如
char b='d';
char *c=b;
c是一个指针,c也是一个变量,c中存的是b的地址,*操作符可以取c变量中存的地址中存的数据,因为是char *,所以可以取出d。

char **是指向指针的指针
比如
char **cc=c;
cc是一个指针,cc也是一个变量,cc中存的是指针c的地址,*cc可以取出指针c中存储的地址(这个地址就是变量b的地址),**c就可以取出b中的元素d!

我的理解就是这样
有不对的楼下指出!

#8


upup~~~~

#9


请问(char **)是什么意思

#10


将str_mid)[i]强制转换为char型的二级指针。

#11


void *str_mid

这个参数应该要求的原始类型是 char**

在函数里面再转回来而已


比如




void fun(void *str_mid)
{
   for (int i = 0; i < 10; ++i)
       ((char **)str_mid)[i]=str[i].GetBuffer(0); 
}


int main()
{
   char* str_mid[10];

   fun(str_mid);

   return 0;
}

#12


各位楼上的说了这么多,lz一定明白了,看见了,也说两句:
所谓指针也是变量例char* p; ,只不过此变量存放的是一个地址值,而这个地址值存放的内容可以用*p 获得,
*p的内容可以是常量内容也可以是变量内容,我们通常就会说一个指针指向某个变量,就是这个意思了。
指针是变量,即是变量就有变量类型了,指针的内容为内存地址,所有的指针存放的都是地址值,区分类型就要靠这些地址值里存放的是什么类型的数据了……
char** pp; 就是二级指针,指向指针的指针,pp里存放的就是p的地址,p是一个char型指针,pp就是一个char型指针的指针。

#13


各位楼上的说了这么多,lz一定明白了,看见了,也说两句:
所谓指针也是变量例char* p; ,只不过此变量存放的是一个地址值,而这个地址值存放的内容可以用*p 获得,
*p的内容可以是常量内容也可以是变量内容,我们通常就会说一个指针指向某个变量,就是这个意思了。
指针是变量,即是变量就有变量类型了,指针的内容为内存地址,所有的指针存放的都是地址值,区分类型就要靠这些地址值里存放的是什么类型的数据了……
char** pp; 就是二级指针,指向指针的指针,pp里存放的就是p的地址,p是一个char型指针,pp就是一个char型指针的指针。

#14


二级指针

指向指针的指针

还有三级的...

char ***pp;

道理一样