指针变量

学习笔记之23-typedef

半城伤御伤魂 提交于 2020-04-04 21:14:04
一、typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 1 #include <stdio.h> 2 3 typedef int Integer; 4 typedef unsigned int UInterger; 5 6 typedef float Float; 7 8 int main(int argc, const char * argv[]) { 9 Integer i = -10; 10 UInterger ui = 11; 11 12 Float f = 12.39f; 13 14 printf("%d %d %.2f", i, ui, f); 15 16 return 0; 17 } 在第3、第4、第6行分别给int、unsigned int、float起了个别名,然后在main函数中使用别名定义变量,用来跟原来的基本类型是完全一样的。输出结果: 当然,给类型起别名后,原来的int、float还是可以正常使用的: int i = 10; float f = 10.0f; * 也可以在别名的基础上再起一个别名 typedef int Integer; typedef Integer MyInteger; 二、typedef与指针 除开可以给基本数据类型起别名,typedef也可以给指针起别名 1 #include

【C语言】23-typedef

ぃ、小莉子 提交于 2020-04-04 21:11:51
本文目录 一、typedef作用简介 二、typedef与指针 三、typedef与结构体 三、typedef与指向结构体的指针 四、typedef与枚举类型 五、typedef与指向函数的指针 六、typedef与#define 说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 这讲介绍C语言中很常用的一个关键字---typedef。 回到顶部 一、typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 1 #include <stdio.h> 2 3 typedef int Integer; 4 typedef unsigned int UInterger; 5 6 typedef float Float; 7 8 int main(int argc, const char * argv[]) { 9 Integer i = -10; 10 UInterger ui = 11; 11 12 Float f = 12.39f; 13 14 printf("%d %d %.2f", i, ui, f); 15 16 return 0; 17 } 在第3、第4、第6行分别给int、unsigned int

java对象结构 对象头 Markword

前提是你 提交于 2020-04-04 09:07:51
概述 对象实例由对象头、实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ------------| --------- | | markword | 32bit | 64bit | | 类型指针 | 32bit |64bit ,开启指针压缩时为32bit | | 数组长度 | 32bit |32bit | header.png compressed_header.png 可以看到 开启指针压缩时,markword占用8bytes,类型指针占用8bytes,共占用16bytes; 未开启指针压缩时,markword占用8bytes,类型指针占用4bytes,但由于 java内存地址按照8bytes对齐,长度必须是8的倍数 ,因此会从12bytes补全到16bytes; 数组长度为4bytes,同样会进行对齐,补足到8bytes; 另外从上面的截图可以看到,开启指针压缩之后,对象类型指针为0xf800c005,但实际的类型指针为0x7c0060028;那么指针是如何压缩的呢?实际上由于java地址一定是8的倍数,因此将0xf800c005*8即可得到实际的指针0x7c0060028,关于指针压缩的更多知识可参考 官方文档 。 markword结构 markword的结构

《php和mysql web开发》读书笔记

有些话、适合烂在心里 提交于 2020-04-04 04:09:10
总算是强迫自己把第一篇给看完了,在这里做一个小结,将一些知识点记录下来。 一、第一篇 使用PHP 1.php中的注释。php支持c、c++和shell脚本风格注释  /**/多行注释 //单行注释 # 单行注释 2.date()函数。  date("H:i:s");  //15:24:23 date("ymd");  //20130707 3.使用$_POST['username'] $_GET'['username']来得到表单内容,取决于提交表单时使用的方法是post 还是get。无论使用什么方式,都可以使用$_REQUEST['username']来得到表单内容。 4.标识符是变量名称的名称,标识符可以是任何长度。由字母、数字、下划线组成。不能以数字开始。标志符区分大小写,但是函数名称是个例外,函数名不区分大小写。php的特性之一就是它不要求在使用变量之前声明变量。 5.php中的8种数据类型,6种常用,2种不常用。  Integer(整数)  用来表示整数  Float(浮点数,也叫Double,双精度值)  用来表示所有实数  String(字符串)  用来表示字符串  Boolean(布尔值)  用来表示true 或false  Array(数组)    用来保存具有相同类型的多个数据项。  Object(对象)   用来保存类的实例 还有两个特殊的类型:NULL(空

1.7 c之 指针

心已入冬 提交于 2020-04-03 23:28:34
指针 *P代表指针变量P所指的那个变量,也就是变量a。 为什么需要指针? 指针存在的目的就是间接访问。有了指针之后,我们访问变量a不必只通过a这个变量名来访问。而可以通过p = &a; *p = xxx这样的方式来间接访问变量a。 两个重要的运算符: &和* 指针的定和初始化 指针既然是一种变量,那么肯定也可以定义和初始化 第一种:先定义再赋值 int p; //定义指针变量p p = &a; //给p赋值 第二种:定义的同时初始化 int p = &a; //效果等同于上面的两句 使用指针的时候,*P则代表指针变量P所指向的那个变量。 int a = 23; int *p; P=&a; p = 111; 这里相当于a = 111 printf(“a = %d.\n”,a) :指针符号。指针符号在指针定义和指针操作的时候,解析方法是不同的。 int P; 定义指针变量p,这里 p含义不是代表指针变量P所指向的那个指针变量,在定义时这里的 含义告诉编译器P是一个指针。 使用指针的时候, p则代表指针变量p所指向的那个变量。 指针全程是指针变量,其实质就是c语言的一种变量。这种变量比较特殊,通常他的值会被赋值为某个变量的地址值( P = &a ),然后我们可以使用*p这样的方式间接访问p所指向的那个变量。 指针变量本质上是一个变量, 指针变量的类型属于指针类型 指针与数组的初次结合

u-boot-1.1.6第2阶段入口函数start_armboot分析

妖精的绣舞 提交于 2020-04-03 17:58:10
学习目标: 1、分析u-boot-1.1.6第2阶段入口函数void start_armboot (void),熟悉该函数所实现的功能 2、为后面能够掌握u-boot-1.1.6如何启动内核过程打下基础 前面通过对uboot第一阶段代码的分析,我们了解的uboot第一阶段所做的一些工作,并且找到了其第二阶段的入口函数void start_armboot(void)。为了能够在清楚理解uboot启动内核的机制,还需要对第二阶段代码进行分析。第二阶段入口函数void start_armboot(void)存放在board.c文件中,该文件位于uboot根目录下的lib_arm文件夹中。 1.gd_t数据结构分配内存 /* Pointer is writable since we allocated a register for it */ gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t)); //为gd_t结构体变量开辟空间 /* compiler optimization barrier needed for GCC >= 3.4 */ //并使得gd指针指向该空间初始位置 __asm__ __volatile__("": : :"memory"); memset ((void*)gd, 0, sizeof (gd

c 指针

落爺英雄遲暮 提交于 2020-04-03 15:42:23
须要注意一点,通常所说的指针实际是“指针变量”的简称,一个指针变量可以被赋予不同的指针值;而指针则是一个地址,是一个常量 可以通过下面的方式来定义一个指向变量的指针: 类型说明符 *变量名; *表示定义的是一个指针变量,变量名即为定义的指针变量名,类型说明符表示指针变量所指向变量的数据类型。 eg: int *zhizheng; 首先理解地址运算符“&"的作用。在C语言中用 , “&”加上变量名称表示变量的地址,因此&test1表示的是变量testl的地址。在程序中,有对指针进行赋值的方式: void test2(){ char test1='A',test2='D'; char *p1=&test1; char *p2; lr_output_message("p1=%c",*p1); p2=&test1; test1 = 'U'; lr_output_message("p1=%c",*p2); *p2 = 'B'; lr_output_message("p1=%c,p2=%c,test1=%c",*p1,*p2,test1); test2 = *p2; lr_output_message("test2=%c",test2); } 结果: p1=A Action.c(29): p1=U Action.c(32): p1=B,p2=B,test1=B Action.c(36):

java空指针异常:java.lang.NullPointException

大憨熊 提交于 2020-04-02 11:06:47
一.什么是java空指针异常 我们都知道java是没有指针的,这里说的"java指针"指的就是java的引用,我们不在这里讨论叫指针究竟合不合适,而只是针对这个异常本身进行分析。空指针就是空引用,java空指针异常就是引用本身为空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。对于空指针来说,它不指向任何对象,也就没有所谓的成员变量和方法,这个时候用它去调用某些属性和方法,当然会出现空指针异常。 public class Test { private int a=1; private int b=2; public static void main(String[] args) { // TODO Auto-generated method stub Test t1 = new Test(); Test t2 = null; System.out.println(t1.a); System.out.println(t2.a); System.out.println(t2.c()); } public String c(){ return "123"; } } 我们分析上面这段示例代码,在Test类中,有两个成员变量a和b,和一个方法c()。然后在main(

深入探索C++对象模型(三)

断了今生、忘了曾经 提交于 2020-04-01 07:50:34
Data 语义学 一个class的data members,一般而言,可以表现这个class在程序执行时的某种状态。Nonstatic data members放置的是“个别的class object”感兴趣的数据,static data members则放置的是“整个class”感兴趣的数据。 C++对象模型尽量以空间优化和存取速度优化的考虑来表现nonstatic data members,并且保持和C语言struct数据配置的兼容性。它们把数据直接存放在每一个class object之中。对于继承而来的nonstatic data members(不管是virtual还是nonvirtual base class)也是如此。不过没有强制定义其间的排列顺序。 至于static data members,则被放置在程序的一个global data segment中,不会影响个别class object的大小。在程序之中,不管该class被产生出多少个objects(经由直接产生或间接派生),static data members永远只存在一份实例(甚至即使该class没有任何object实例,其static data members也已存在)。但是一个template class的static data members的行为稍有不同。 Data Member的绑定(The

2、指针的算术运算

筅森魡賤 提交于 2020-04-01 03:18:51
指针可以加上或减去一个整数。 指针的这种运算的意义和通常的数值的加减 运算的意义是不一样的 ,以单元为单位。 例如: 例二: char a[20]; int *ptr=(int *)a; // 强制类型转换并不会改变 a 的类型 ptr++; 在上例中,指针 ptr 的类型是 int*, 它指向的类型是 int ,它被初始化 为指向整型变量 a 。接下来的第 3 句中, 指针 ptr 被加了 1 ,编译器是这样 处理的:它把指针 ptr 的值加上了 sizeof(int) ,在 32 位程序中,是被加上 了 4 ,因为在 32 位程序中, int 占 4 个字节。 由于地址是用字节做单位的, 故 ptr 所指向的地址由原来的变量 a 的地址向高地址方向增加了 4 个字节。 由于 char 类型的长度是一个字节,所以,原来 ptr 是指向数组 a 的第 0 号 单元开始的四个字节,此时指向了数组 a 中从第 4 号单元开始的四个字节。 我们可以用一个指针和一个循环来遍历一个数组,看例子: 例三: int array[20]={0}; int *ptr=array; for(i=0;i<20;i++) { (*ptr)++; ptr++ ; } 这个例子将整型数组中各个单元的值加 1 。由于每次循环都将指针 ptr 加 1 个单元 ,所以每次循环都能访问数组的下一个单元。 再看例子: