符号(void *)何解?符号(void **)又何解??

http://bbs.csdn.net/topics/70050852

对于多级指针或者数组,要掌握正确的识别方法:
void*  是说: 这是一个指针,去掉一个(*)就是它所指向的,在这里是指向放void型的地方;
void**  是说: 这也是一个指针,去掉一个(*)就是它所指向的,它指向一个放void*型的地方.
如下
#include <iostream>

int main(int argc,int * argv[])
{
  int *i[2];
  int a = 0;
  int b = 1;
  int *pa = &a ;
  int *pb = &b;
  i[0] = pa ;
  i[1] = pb;
  void **ppA = (void **)i;
  return 0;
}



void*  是说: 这是一个指针,它指向任何类型的对象.
void**  是说: 这是一个指针,它指向一个void* 型的指针.这个void *的指针又指向任何类型的对象



比如找人一样。这个人是李四
void * pdes;就好像某人的住址一样。你到他家就可以找到他了。
但是他爸说,这小子已经被我卖了,成了张三的儿子。他爸告诉你张三家的住址,然后你去张三家就可以找到李四了。
张三的地址就是
void ** ppdes;

如果张三说,已经把李四又卖了武大。

于是就又要变成
void *** pppes;

时间: 2024-10-06 14:13:06

符号(void *)何解?符号(void **)又何解??的相关文章

C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);

问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,<C专家编程>P64原文如下: 规则A规定了要按照优先级来解释声明(算是一句废话).规则C请参照本人上一篇笔记:http://www.cnblogs.com/deyuanqin/p/5705967.html.规则B的具体实践过程如下图: 本着抛砖引玉的目的,我们使用以上规则分析void (*signa

【C语言面试题】第1题:有符号变量和无符号变量的值得转换

#include <stdio.h> char getChar(int x,int y) {         char c;         unsigned int a = x;         (a + y > 10) ? (c = 1) : (c = 2);         return c; } int main(void) {         char c1 = getChar(7,4);         char c2 = getChar(7,3);         char

汇编总结:无符号除法,有符号除法,取余,无符号乘法,有符号乘法

本文分为3个模块. 示例---该指令的示例 解释---为指令不好理解的地方 练习---为了更熟悉该指令 1.1 有符号除法指令及取余example: 在c语言里要完成 8 / 2的汇编指令如下: 在c语言里要完成 8 % 2的汇编指令如下: 4个字节的除法及取余运算示例如下: .section .text .global _start _start:     movl $8, %eax   #被除数是%edx:%eax 是这两个寄存器拼起来的%eax存放低位%edx存储高位     movl %

【c语言】有符号数据类型与无符号数据类型的计算

// 有符号数据类型与无符号数据类型的计算 #include <stdio.h> int main() { char c;// -128~127 unsigned char uc;//0~255 unsigned short us;// 0~65535 c = 128; uc = 128; // 字符型给短整型赋值有默认的类型提升,前边八位补其符号位 us = c + uc; // us = -128 + 128 = 0即1111 1111 1000 0000 + 0000 0000 1000

如何理解这段代码:void (*signal (int sinno,void(*func)(int)))(int)

void (*signal (int sinno,void(*func)(int)))(int) 先来看void(*func)(int)   这里的意思是声明一个函数指针func,它的参数类型为int,参数名可省略不写,当然(int x)也没错. 声明一个函数指针signal,他有两个参数,int sinno,和一个函数指针参数void(*func)(int). signal函数有自己的参数类型int,省略了参数名:void (*signal (int sinno,void(*func)(int

人民币符号是什么 人民币符号怎么打

人民币简写符号的由来我们在书写人民币金额时,习惯于在阿拉伯数字前写上“¥”符号,这就是我国人民币的简写符号.“¥”既作为人民币的书写符号,又代表人民币的币制,还表示人民币的单位“元”.在经济往来和会计核算中用阿拉伯数字填写金额时,在金额首位之前加一个“¥”符号,既可防止在金额前填加数字,又可表明是人民币的金额数量.由于“¥”本身表示人民币的单位,所以,凡是在金额前加了“¥”符号的,金额后就不需要再加“元”字. 那么,人民币简写符号“¥”是怎样产生的呢? 这要追溯到民国时期.1935年,国民党政府

void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?

void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别? const void fun(){};和void const fun(){};两个相同. 如果采用"按址传递方式"的函数返回值加const 修饰,那么函数返回值(即地址)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针. 如果采用"按值传递方式"的函数返回值加const 修饰,由于函数会把返回值复制到外部临时的存储单元

c++有符号变量和无符号变量相加的结果

#include <stdio.h> char getChar(int x,int y) { char c; unsigned int a = x; (a+y>10)?(c=1):(c=2); return c; } int main() { char c1 = getChar(7, 4); char c2 = getChar(7, 3); char c3 = getChar(7, -7); char c4 = getChar(7, -8); printf("c1=%d\n&q

未解决符号表,导出符号表和地址重定向表

让我们总结一下:编译器把一个cpp编译为目标文件的时候,除了要在目标文件里写入cpp里包含的数据和代码,还要至少提供3个表:未解决符号表,导出符号表和地址重定向表.     未解决符号表提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其出现的地址.     导出符号表提供了本编译单元具有定义,并且愿意提供给其他编译单元使用的符号及其地址.     地址重定向表提供了本编译单元所有对自身地址的引用的记录.     链接器进行链接的时候,首先决定各个目标文件在最终可执行文件里的位置.然

c中无符号(unsigned)和有符号(signed)两种类型。

整型的每一种都分为:无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned.无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个short能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535.由于在计算机中,整数是以补码形式存放的.根据最高