0x01.指针的声明

char x;           char* x;
short y; short* y;
int z; int* z;
float f; float* f;
double d; double* d;
Struct st; Struct* st;

从这边可以总结出来

1、带有 * 的变量标准写法: 变量类型* 变量名

2、任何类型都可以带* ,加上以后就是新的类型,统称 “指针类型”

3、
可以是任意多个

0x02.指针变量赋值

赋值有两种形式

int x = 10;
int* i;
i = &x;
printf("%#X", i);

这边其实用到了取址符(&),也就是取出x变量的地址



这边可以发现单单是变量i,没有加*的话,是存储x的地址

i(0x4FF718) = x = 10

这时候我们想得到i的值,我们就得再i那边加个*号



发现成功打印出了值,这时候我们可以小总结一下了;

1、&号是取址,取出指定变量的地址

2、*号是取值,取出内存地址上面的值

int* i;
char* x;
short* b;
i = (int*)10;
x = (char*)10;
b = (short*)10;

这种方式的赋值其实就是强转

0x03.指针变量宽度



总结:指针类型的变量永远是4字节,无论类型是什么,无论有几个*

可以写一段代码看一下

int main()
{
char* i;
i = (char*)10;
return 0;
}

正常情况下char是1字节,byte;但是因为加了个*,变成了指针类型,所以是4字节,也就是dword类型



从这边我们就可以验证了刚刚所想的

0x04.指针类型自增自减

char a = 100;
short b = 100;
innt c = 100;
a++;
b++;
c++;

总结:

1、不带类型的变量,++或者--都是加1 或者减1

2、带
类型的变量,++或者--新增(减少)是去掉一个*后变量

例子:

比如short是4字节,但是要++的时候,++的宽度是去掉后的宽度

short* a = 10;

a++;

a = 12

因为short去掉*后是2字节,所以1 乘 2 等于2

0x05.指针类型加减法

char* a = 100;
short* b = 100;
int* c = 100;
a = a+5;
b = b+5;
c = c+5;

总结:

1、指针类型的变量可以加、减一个整数,但不能乘除

2、指针类型变量与其他整数相加或者相减时:

指针类型变量 + N = 指针类型变量 + N 乘 (去掉一个*后类型的宽度)

0x06.指针类型比较

int main()
{
char* i;
char* b;
i = (char*)10;
b = (char*)11;
if (b>i)
{
printf("b > i");
} return 0;
}

探测&变量的类型

&是取地址符,任何变量都可以使用& 来获取地址,但是不能用在常量上。

char a;
short* b;
int** c; int x =&a;
int x = &b;
int x = &c;



可以得出编译器把 &a 当做char * 看待

总结: 只要有&这个符号,那么编译器会把原本的类型加上个*看待

我们再举个例子



这时候short 原本就有一个了,但是因为值用了取址符(&),所以就在原本的类型再加个*

c语言之指针特性的更多相关文章

  1. C、C++、C#、Java、php、python语言的内在特性及区别

    C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...

  2. go语言学习--指针的理解

    Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, fu ...

  3. C语言函数指针 和 OC-Block

    C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/2967037 ...

  4. IT兄弟连 Java语法教程 Java语言的其他特性

    Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ●  语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...

  5. 大数据笔记(二十六)——Scala语言的高级特性

    ===================== Scala语言的高级特性 ========================一.Scala的集合 1.可变集合mutable 不可变集合immutable / ...

  6. C语言的指针和数组

    指针和内存 指针变量也是个变量,不过保存的是另一个变量的地址.另外编译器还会记住指针所指向变量的类型,从而在指针运算时根据变量类型采取不同操作. 例如,char * a 定义了char 类型的指针变量 ...

  7. go语言的指针类型

    一.指针与引用的相关概念 什么是指针? 指针,全称为指针变量,是用来存储内存地址的一种变量.程序中,一般通过指针来访问其指向的内存地址中的内容(数据). 什么是引用? 引用,是C++中提出来的一种新的 ...

  8. 浅谈c语言的指针

    对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...

  9. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

随机推荐

  1. 刷题[HCTF 2018]WarmUp

    解题思路 进入页面之后,一个大大的滑稽. 查看源码 查看源码发现有source.php .打开 发现还有一个hint.php.打开发现 由此可知是代码审计了 解题 代码审计 先看此段代码,大致意思是. ...

  2. 永久改变cmd背景颜色

    问题描述:cmd窗口为白底黑字,用久之后想换背景颜色. 解决方法一: win+R 输入regedis进入注册表,找到 HKEY_CURRENT_USER\Software\Microsoft\Comm ...

  3. Quartz.NET集成UI版

    Quartz.NET Quartz.NET是NET的开源作业调度系统. Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统. Quartz.NET目前支持NET ...

  4. NMAP类型题目 (escapeshellarg,escapeshellcmd使用不当)

    [BUUCTF 2018]Online Tool 给出了源码 审计 <?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER[' ...

  5. 【CF1425B】 Blue and Red of Our Faculty! 题解

    原题链接 简要翻译: 有一个连通图,A和B同时从点1出发,沿不同的路径前进.原本,图上的每一条边都是灰色的.A将经过的边涂成红色,B将经过的边涂成蓝色的.每个回合每个人只能走灰色的边.当某个回合中不存 ...

  6. Centos-目录或文件拷贝-cp

    cp 拷贝或者备份文件或者目录 相关选项 -a 拷贝目录保存文件所有信息 -r  递归拷贝目录 -d 保留连接 -p 保留修改时间和存取权限 -i 有同名提醒是否覆盖 相关应用 1. 备份文件 cp ...

  7. RTThread DFS文件系统使用: 基于使用SFUD驱动的SPI FLASH之上的ELM FATFS文件系统

    参考博文: 博文很长,但是实际要操作的步骤没几下. http://m.elecfans.com/article/730878.html  为了防止几年后文章链接找不到,我把文章复制过来了 /***** ...

  8. CSP-J 2019复赛分析

    [CSP-J 2019 ]复赛分析 前言(????) 总的来说,这次复赛感觉考的很不满意,至于原因,感慨万分!关键是:期中考试了!偏偏是这个时候! - 由于我是一个初二的蒟蒻,所以考试前先定了一个目标 ...

  9. 怎么写一个Activity

    a.新建一个类继承Actitvity b.重写oncreate方法 setContentView(R.layout.XXX);//设置布局文件 c.注册activity <activity an ...

  10. 第五周:面向对象部分内容总结(5)---java设计规则

    面向对象设计原则 1.开闭原则 开闭原则理解: 简单说就是一个软件实体支持扩展,不支持修改.就是在不改变源码的基础上,扩展其它的功能. 其实笔者认为,开闭原则无非就是想表达这样一层意思:用抽象构建框架 ...