地址

指针和引用的区别

微笑、不失礼 提交于 2020-01-14 06:23:03
1、指针是存放变量地址的一个变量,指向内存的一个存储单元,在逻辑上是独立的,可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 引用是其所引用的变量的一个别名,与其所引用的变量实质上是同一个东西,在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。 2、指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的);3 3、指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化; 4、指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了; 5、"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小; 6、指针和引用的自增(++)运算意义不一样; 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

imx6ull 双网口设置mac地址

北战南征 提交于 2020-01-13 23:58:30
本人在调试imx6ull的时候,需要烧写mac地址,和imx6ul一样,我们使用的是烧写fuse的方式烧写mac地址,也就是fsl_otp/HW_OCOTP_MAC0 1 2三个地方对应了双网口的mac地址,具体的我就不仔细说了,这个网上都有,但是注意这种方式烧写mac地址之后,比较难更改,只能0写1 不能1写0,所以尽量不要烧写错误。 但是在imx6ull,也是freescale4.1.15的代码中,也是如此做,但是发现后期读出来的mac地址是重复的,当然我很快就去校验了fuse之中的mac地址,发现烧写没问题,然后暂时就用开机脚本的方式来设置mac地址,这个也比较简单,就手动去读fuse,启动设置两个网卡的mac地址,但是这终究不是办法,于是就趁着放假前来探究了一下内核源码中如何读写这个mac地址。。。。 首先在drivers/net/ethernet/freescale/fec_main.c 这个文件中我和3.14比较了一下发现没有啥区别,但是有个fec_get_mac()函数,相信肯定是在这里面设置了mac地址, 如图写了4个方案1是从kernel command读取经过debug发现,macaddr是空的,所以没有读取到,然后2是从devicetree读取,感觉不像,3是从flash or fuse里面读取看上去比较像,4是从uboot里读取。 !!

重新认识变量和数组

主宰稳场 提交于 2020-01-13 23:47:46
重新认识基本类型的变量 变量的基本逻辑—— 有定才有变 。在人看来,固定的是名字,变化的是名字对应的值。对计算机来说, 固定的是地址,变化的是它的值。 理解 计算机如何使用内存来完成变量的功能的: 内存就像一堆白纸,只能通过页码编号进行访问,也就是所谓的 内存地址 。 变量就是使用一个固定地址加上这个地址对应的内存。 计算机通过地址读写地址对应的内存的值,完成变量的赋值和访问值的功能。就好像根据页码编号,在指定的白纸上写字或者擦掉重写。 变量的名就是地址,变量的实就是地址的内存上保留的值。 理解数组的名与实 数组的“实”是一块 地址连续的内存 ,就像是编号连续的一沓白纸。 数组的名,就是这块连续内存的地址。 数组的变量和基本变量一样,本身就是一个地址。但是与基本变量不一样的是,这个地址的值,是数组的“名”,也就是数组的第一个地址。 数组 = 数组变量 + 数组实体 数组变量[索引] 就是在数组原有地址的基础上,加上索引,获得想要的元素。 因此索引值从0开始,这是因为数组变量的地址就是 数组第一个元素的地址 。 另外,实际上0代表对原来位置的 0个偏移量 ,因此也就不难理解为什么数组下标从0开始了。 数组的长度 数组变量.length 可以获取到数组的长度 数组创建后,长度不可以改变 public class WhatIsArray { public static void main

linux ——Uboot模式下读取NORflash芯片数据

戏子无情 提交于 2020-01-13 04:43:35
命令: md指令 uboot下输入指令md,会提示md的用法,memory display,即内存显示。 md [.b, .w, .l] address [# of objects] - memory display b:8位 w:16位 l:32位(默认值) 例: mw指令 uboot下输入指令mw,会提示md的用法,memory write,即向内存中写入数据。 U-Boot-PetaLinux> mw mw - memory write (fill) Usage: mw [.b, .w, .l] address value [count] b:8位 w:16位 l:32位(默认值), address是要写入内存的地址, value是要写入的值, count是从address开始要写入多少个数,这些都是16进制数。 操作流程: Uboot模式下读取NORflash芯片数据 注意:b8000000 为Norflash基地址,需要根据电路板自行得出。 mw.w b8000aaa aa //往地址AAAH写入AAH(解锁) mw.w b8000554 55 //往地址554H写入55H(解锁) mw.w b8000aaa 90 //往地址AAAH写入90H(命令) md.w b8000000 1 // 读0地址得到厂家ID(C2H) md.w b8000002 1 //

事先准备好针和线才能编织未来(第七周)

╄→гoц情女王★ 提交于 2020-01-12 23:35:20
1、 简述osi七层模型和TCP/IP五层模型 OSI七层模型: 物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。 数据链路层:在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。 网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。 传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。 会话层:提供两进程之间建立、维护和结束会话连接的功能;提供交互会话的管理功能,如三种数据流方向的控制,即一路交互、两路交替和两路同时会话模式 。 表示层:代表应用进程协商数据表示;完成数据转换、格式化和文本压缩。 应用层:提供OSI用户服务,例如事务处理程序、文件传送协议和网络管理等。 TCP/IP五层模型 物理层:负责光电信号传递方式。集线器工作在物理层。以太网协议。 数据链路层:负责设备之间的数据帧的传输和识别。交换机工作在数据链路层。例如网卡设备的驱动,帧同步,冲突检测,数据差错校验等工作。 网络层:负责地址管理和路由选择。路由器工作在网络层。 传输层:负责两台主机之间的数据传输。 应用层:负责应用程序之间的沟通。网络编程主要针对的就是应用层。 2、

准确理解SO_REUSEADDR

二次信任 提交于 2020-01-12 17:25:34
默认情况下,套接字不同一个正在使用的本地地址绑定到一起。但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用。每个连接都是通过它的本地及远程地址的组合,“独一无二”地标识出来的。针对我们想要连接的地址,只要能用极其细微的差异(比如TCP/IP中采用不同的端口号),来维持这种“独一无二”或者“唯一”的特点,绑定便是允许的。 唯一例外的是监听套接字。两个独立的套接字不可与同一个本地接口(在TCP/IP的情况下,则是端口)绑定到一起,以等待进入的连接通知。假定两个套接字都在同一个端口上进行监听,那么到底由谁来接收一个进入连接通知呢?对于这个问题,目前尚无一种正式规范提出了解决方案。在TCP的环境下,假如服务器关闭,或异常退出,造成本地地址和端口均进入TIME_WAIT状态,那么SO_REUSEADDR 这个套接字选项便显得非常有用。在TIMEWAIT状态下,其他任何套接字都不能与那个端口绑定到一起。但假若设置了该选项,服务器便可在重新启动之后,在相同的本地接口及端口上进行监听。 来源: https://www.cnblogs.com/crunchyou/p/3487489.html

TCP/IP 协议

旧巷老猫 提交于 2020-01-12 17:02:53
  (无意中有人问题什么是TCP/IP协议,故做此整理)    什么是TCP/IP协议呢? TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合。准确的来说TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。传统上来说 TCP/IP 被认为是一个四层协议:    网络层 主要就是做物理地址与逻辑地址之间的转换。目前市场上应用的最多的是 32 位二进制的 IPv4 ,因为 IPv4 的地址已经不够用了,所以 128 位二进制的 IPv6 应用越来越广泛了(但是下面的介绍都是基于 IPv4 进行的) 1) IP:TCP/IP 协议网络上的每一个网络适配器都有一个唯一的 IP 地址。IP 地址是一个 32 位的地址,这个地址通常分成 4 端,每 8 个二进制为一段,但是为了方便阅读,通常会将每段都转换为十进制来显示,比如大家非常熟悉的 192.168.0.1 IP 地址分为两个部分:网络 ID、主机 ID 具体哪部分属于网络 ID,哪些属于主机 ID 并没有规定.绝大部分 IP 地址属于以下几类: A 类地址:IP 地址的前 8 位代表网络 ID ,后 24 位代表主机 ID。 B 类地址:IP 地址的前 16 位代表网络 ID ,后 16 位代表主机 ID。 C 类地址:IP

tcp/ip协议和http协议

南笙酒味 提交于 2020-01-12 08:19:56
TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合. 传统上来说 TCP/IP 被认为是一个四层协议:应用层(telnet, ftp, http, smtp, dns等),传输层(tcp, udp),网络层(ip,icmp,arp,rarp),网络接口层(各种物理通信网络接口) 三次握手 四次挥手 网络接口层: 主要是指物理层次的一些接口,比如电缆等. 网络层: 提供独立于硬件的逻辑寻址,实现物理地址与逻辑地址的转换. 在 TCP / IP 协议族中,网络层协议包括 IP 协议(网际协议),ICMP 协议( Internet 互联网控制报文协议),以及 IGMP 协议( Internet 组管理协议). 3) 传输层: 为网络提供了流量控制,错误控制和确认服务. 在 TCP / IP 协议族中有两个互不相同的传输协议: TCP(传输控制协议)和 UDP(用户数据报协议). 4) 应用层: 为网络排错,文件传输,远程控制和 Internet 操作提供具体的应用程序 2.数据包 在 TCP / IP 协议中数据先由上往下将数据装包,然后由下往上拆包 在装包的时候,每一层都会增加一些信息用于传输,这部分信息就叫报头,当上层的数据到达本层的时候,会将数据加上本层的报头打包在一起,继续往下传递. 在拆包的时候,每一层将本层需要的报头读取后,就将剩下的数据往上传. 3.网络接口层

数据结构---->哈希表

馋奶兔 提交于 2020-01-12 04:39:53
一、哈希表 哈希表又称散列表。 哈希表存储的基本思想是:以数据表中的每个记录的关键字k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。 在此称该函数H为哈希函数或散列函数。按这种方法建立的表称为哈希表或散列表。 例如,要将关键字值序列(3,15,22,24),存储到编号为0到4的表长为5的哈希表中。 计算存储地址的哈希函数可取除5的取余数算法H(k)=k% 5。则构造好的哈希表如图所示。 理想情况下,哈希函数在关键字和地址之间建立了一个一一对应关系,从而使得查找只需一次计算即可完成。由于关键字值的某种随机性,使得这种一一对应关系难以发现或构造。因而可能会出现不同的关键字对应一个存储地址。即 k1≠k2 , 但 H(k1)=H(k2 ), 这种现象称为 冲突 。 把这种具有不同关键字值而具有相同哈希地址的对象称 “ 同义词 ” 。 在大多数情况下,冲突是不能完全避免的。这是因为所有可能的关键字的集合可能比较大,而对应的地址数则可能比较少。 对于哈希技术,主要研究两个问题: (1)如何设计哈希函数以使冲突尽可能少地发生。 (2)发生冲突后如何解决 。 二、哈希函数 构造好的 哈希函数 的方法,应能使冲突尽可能地少,因而应具有较好的随机性。这样可使一组关键字的散列地址均匀地分布在整个地址空间