指针解析

不同类型的指针
int *p
void *p
ZooAnimal* p
这个问题由来已久,各种类型的指针,内存中只是一个4个字节存储的地址,那怎么区分呢
主要是其寻址出来的object类型不同,指针类型会教导编译器如何解释某一个特定地址中的内容和大小,我突然想到了汇编中哪些寻址,这个指针的寻址和那个肯定有关系
加入int类型的指针地址是1000,那他解析的地址将是1000-1003
对于类的复杂一些,但还是按照其类的大小和内存结构进行解析的
void*的地址不代表什么类型,所以无法解析
对于强制转换,他只是影响"被指出内存的大小和内容"的解释方式
如void* p; (int*)p;对于这个将p指向的内容按照int进行解析,void*在传参时用的很多
时间: 2024-10-13 05:08:50

指针解析的相关文章

右左法则----复杂指针解析

核心提示:因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法 因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法.不过,右左法 则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法.C标准的声明规则,是用来解决如何创建声明的,而右左法则是用 来解决如何辩识一个声明的,两者可以说是相反的.右左法则的英文原文是这样说的: The right-left rule:

复杂指针解析

因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既 著名又常用的方法.不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法.C标准的声明规则,是用来解决如何创建声明的, 而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的.右左法则的英文原文是这样说的: The right-left rule;Start reading the declaration from the innermost parentheses,

指针理解——复杂指针解析

右左法则 首先从最里面的圆括号看起,然后往右看,再往左看,每当遇到圆括号时,就应该调转阅读方向,一旦解析完圆括号里面的所有东西,就跳出圆括号,重复这个过程直到整个声明解析完毕. 举例:int * (* (*fun) (int *)) [10] 首先,fun是一个指针,因为他先跟*(绿色色)结合.fun指向的是一个函数,该函数特点是有一个整形指针做参数,并且返回值仍然是一个指针(品红色).其返回值指针指向的内容是个数组.所指向的数组有10个元素,每个元素都是int *类型. 练习: 用变量a给出下

C指针解析 ------ 指针的算术运算

本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 指针是一个特殊的变量,表示一个地址,而地址能够上减去或加上一个整数,从而能够表示新的地址. 以下通过一段代码来分析指针的算术运算: #include <stdio.h> int main(){ int i; char str[]={'a','b','c','d','e'}; int *p = str; char *q = str; q++; p++; printf("

C语言函数、函数指针解析

函数.函数指针的理解: 函数的定义: void myfunc(void) { } 函数的声明 void myfunc(void); 函数指针的定义.初始化.赋值: 定义:void (*funcp)(void); 初始化: void (*funcp)(void) = &myfunc; 赋值 void (*funcp)(void); funcp = &myfunc; 函数调用:(*funcp)(); funcp(); 也可以这样赋值:void (*funcp)(void); funcp = m

C指针解析 ------ 指针表达式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 所谓的指针表达式是指一个表达式,其结果是一个指针. 例1. int  a,b; int array[20]; int *p; p = &a;             //&a 就是一个指针表达式,因为&a的结果就是一个指针. int **q = &p;     //&p也是一个指针表达式. *q = &b;            //*p和

C指针解析 ------ 运算符&amp;和*

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 & 是取地址运算符,* 叫做指针运算符或间接运算符.&a 的运算结果是一个指针,指针的类型是a的类型加上*,指针所指向的类型是a的类型,指针的值也就是指针所指向的内存区就是a的地址. *p的运算结果就多了,总之,*p的结果是p所指向的东西,这个东西有这些特点: 它的类型是p所指向的类型,它所占用的地址是p所指向的地址. 看下面的例子: int a = 5; int b;

SGI STL 函数static void (* set_malloc_handler(void (*f)()))()与函数指针解析

在C++ STL的SGI实现版本中,一级空间配置器class __malloc_alloc_template中有一个静态函数的实现如下: static void (*set_malloc_handler(void (*f)()))() { void (*old)() = __malloc_alloc_oom_handler; __malloc_alloc_oom_handler = f; return (old); } 没接触过函数指针的人看到这段代码可能会很头疼,不知道这个函数表达什么意思.

C指针解析 ------ 指针的概念及要素

 本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 指针在C语言中的地位,不用多说. 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存中的一个地址.指针有四个要素,分别是指针的类型,指针所指向的类型,指针的值或者指针所指向的内存区,还有指针本身所占据的内存区.所以要理解指针,就必须要搞清楚这四个要素.下面分别来说. 先来看一个例子,通过例子来直观的看指针这四个要素到底代表什么: 例1. (1) int *ptr