关于指针:

当定义int *p时,它也会在内存中给指针变量p分配一个内存单元,假设这个单元在内存的编址为0x1003;此时,0x1003中的值是不确定的,(因为我们没有给指针赋值),当编译器遇到了p=&a时,就会在0x1003单元中保存一个地址(变量a在内存中分配的地址)

空指针:不指向任何单元,仿真野指针。在stdio.h中被定义为

#define NULL ((void *)0)
#define NUL ’\0
NULL 使 p 指向地址 0。大多数系统中都将 0 作为不被使用的地址,所以吴用 p 也不会毁坏数据
但并非总是如此,也有系统会使用地址 0,而将 NULL 定义为其他值,所以不要把 NULL 和 0 等同起来
因为PC上有NULL的定义所以可以直接拿来使用,但是在单片机中,就没有NULL了。而且也不能简单将NULL自定义为0,因为0地址处是有用的,那么此时该怎么办呢?
空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。在函数调用时对所有的空指针进行类型转换可能是预防可变参数和无原型函数出问题的最安全的办法
注意 NULL 和 NUL 的区别:NULL表示空指针,是一个宏定义,可以在代码中直接使用。而 NUL 表示字符 '\0',也就是字符串结束标志,它是ASCII码表中的第 0 个字符。NUL 没有在C语言中定义,仅仅是对 '\0' 的称呼,不能在代码中直接使用

野指针的2种情况:

1 定义指针时没有确定的指向对象(没赋值成NULL)

2 指针p被free或者delete之后,没有置为NULL

code是KEIL C51的扩展关键字,被其修饰的变量放在ROM(硬件层面实现只读),常用来存储一个字库等常量数据表;

const是ANSI C的关键字(使用范围比keil广),被其修饰的变量理论上可以修改,但编译器会识别并报错。常用来修饰一个常量字符串或常量表。

(void *)型通用指针(无确切类型):它可以指向任何类型的变量,连续存储区的存储单元。任何类型的指针都可以通过显示类型转换变为void*型指针(即作为左值。为了获取其存储的起始地址而不获得大小),即void*是一种特别的指针,代表任何存储类型(不能判断所指对象的存储长度,所以不能引用和参与计算(不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来);常做函数的参数和返回值:此时表示入口参数或返回值可以是任何类型的指针)。指针有两个属性:指向变量/对象的地址和长度
但是指针只存储地址,长度则取决于指针的类型 。
编译器根据指针的类型从指针指向的地址向后寻址。

void * memcpy(void *dest, const void *src, size_t len);

void * memset ( void * buffer, int c, size_t num );

因此:

1 在51单片机中定义字库表要用到code(也可以用const CODE这样既说明存储类型有说明读写特性),查表返回表中位置要 unsigned char code *,不要code要出错因为一个是定位到IDATA中,一个在CODE中。

2 字符串或者字符型指针作为参数和返回值:作为参数时用const void*,返回值用void*

3 char *p= "hello word!",此时不能用P[2];

char str[]="hello word!",此时可以用P[2];

或者char str[]= "hello word!";char *p=str;此时可以用P[2];

code与const void*指针的更多相关文章

  1. void指针和const指针

    void指针:主要是便于传递不同类型的参数 const指针: const char *p :const 在* 的左边表示指向一个常量指针:表示指向的内容不可变(*p不能变,p可以改变) int a = ...

  2. void指针意义、Const、volatile、#define、typedef、接续符

    1.C语言规定只有相同类型的指针才可以相互赋值. Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换. 2.在C语言中Const修饰的变量是只读的,本 ...

  3. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  4. 你必须知道的指针基础-7.void指针与函数指针

    一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...

  5. C语言 const与指针

    //const与指针 #include<stdio.h> #include<stdlib.h> void main(){ ; ; const int *p; p = & ...

  6. 弄清const与指针、引用之间的关系

    const和 define在常量定义上的差别 在C++中,我们可以使用const 或者 宏define来定义常量.但是C++鼓励使用const定义常量,而不是宏define.原因有很多. 1.defi ...

  7. (七)C语言中的void 和void 指针类型

    许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...

  8. C/C++语言void及void指针深层探索(转)

    转自:http://www.lanou3g.com/blog/sort/SelfiOS/page/78 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一 ...

  9. void指针(void*)用法

    首先看一段测试代码: #include <stdio.h> int void_test(void* data) { ; num = *(int*)data; printf("nu ...

随机推荐

  1. Jenkins安装部署及tomcat的入门介绍

    这里我们使用的方法是用servlet容器来部署jenkins,使用的是tomcat 下载下来tomcat,解压 bin目录下存放的一些启动关闭批处理文件 conf目录下放的一些配置文件,配置虚拟主机之 ...

  2. phpcms v9中的$CATEGORYS栏目数组

    首先 如果不能用$CATEGORYS这个数组或掉不出来内容应加入 $CATEGORYS = getcache('category_content_1','commons'); 1.用途 $CATEGO ...

  3. 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)

    基于深度学习和迁移学习的识花实践(转)   深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...

  4. 编译Thrift

    按照 https://syslint.com/blog/tutorial/how-to-install-apache-thrift-on-ubuntu-14-04/ 进行, 编译时出现错误 make[ ...

  5. 页面渲染——简化paint复杂程度和区域

    Paint是填充像素并且最后合成在用户的屏幕上的过程. 通常是在管道中耗费最大的,你要尽可能的避免使用paint. 动画中使用除了transform和opacity的动画属性都将触发paint pai ...

  6. 【应用】图片翻转js

    图片翻转:图片随着鼠标指针划过进行替换 <img src="example.gif" onmouseover="this.src='exampleTwo.gif'& ...

  7. C++之萃取技术(traits)

    为什么需要类型萃取(特化) 前面我们提到了迭代器,它是一个行为类似于smart pointer之类的东西,主要用于对STL容器中的对象进行访问,而且不暴露容器中的内部结构,而迭代器所指对象的型别称为该 ...

  8. C++之new和delete

    new 和 delete 是 C++ 用于管理 堆内存 的两个运算符,对应于 C 语言中的 malloc 和 free,但是 malloc 和 free 是函数,new 和 delete 是运算符.除 ...

  9. 采用个hook技术对writefile函数进行拦截(2)

    http://www.cnblogs.com/zhxfl/archive/2011/11/03/2233846.html 这个是笔者之前写过的WriteFile HOOK代码 必须补充对这几个函数的H ...

  10. bzoj 3028 食物 —— 生成函数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3028 式子很好推,详细可以看这篇博客:https://blog.csdn.net/wu_to ...