c语言之指针特性
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语言之指针特性的更多相关文章
- C、C++、C#、Java、php、python语言的内在特性及区别
C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...
- go语言学习--指针的理解
Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, fu ...
- C语言函数指针 和 OC-Block
C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/2967037 ...
- IT兄弟连 Java语法教程 Java语言的其他特性
Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ● 语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...
- 大数据笔记(二十六)——Scala语言的高级特性
===================== Scala语言的高级特性 ========================一.Scala的集合 1.可变集合mutable 不可变集合immutable / ...
- C语言的指针和数组
指针和内存 指针变量也是个变量,不过保存的是另一个变量的地址.另外编译器还会记住指针所指向变量的类型,从而在指针运算时根据变量类型采取不同操作. 例如,char * a 定义了char 类型的指针变量 ...
- go语言的指针类型
一.指针与引用的相关概念 什么是指针? 指针,全称为指针变量,是用来存储内存地址的一种变量.程序中,一般通过指针来访问其指向的内存地址中的内容(数据). 什么是引用? 引用,是C++中提出来的一种新的 ...
- 浅谈c语言的指针
对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
随机推荐
- Java基础一篇过(六)Java8--lambda表达式
一.简介 lambda表达式是Java8的一个重要特性,也可以称为闭包,常用于配合Java8的Stream对集合元素进行操作,使得代码更简介紧凑. 二.代码解析 虽说lambda表达式是一个新的特性, ...
- 盘点MySQL中比较实用的函数
之前小编在工作中遇到一些处理数据的问题,例如完成日期格式化,获取几天后的时间,生成指定格式的编码等问题,这时候小编经常会写一大堆逻辑代码来进行处理,还自己感觉自己很流弊的样子,后来却发现同事遇到相同的 ...
- Vue学习笔记使用系列一【表单】
脚手架的搭建,请查看另外一篇日记:https://www.cnblogs.com/Fengge518/p/11837078.html 1:直接代码了 1 <!DOCTYPE html> 2 ...
- Python-嵌套列表变成普通列表
如何把[1, 5, 6, [2, 7, [3, [4, 5, 6]]]]变成[1, 5, 6, 2, 7, 3, 4, 5, 6]? 思考: -- for循环每次都遍历列表一层 -- 把取出的单个值加 ...
- 中部:执具 | R语言数据分析(北京邮电大学)自整理笔记
第5章工欲善其事.必先利其器 代码,是延伸我们思想最好的工具. 第6章基础编程--用别人的包和函数讲述自己的故事 6.1编程环境 1.R语言的三段论 大前提:计算机语言程序=算法+数据结构 小前提:R ...
- Java知识系统回顾整理01基础04操作符02关系操作符
一.关系操作符 关系操作符:比较两个变量之间的关系 > 大于 >= 大于或等于 < 小于 <= 小于或等于 == 是否相等 != 是否不等 public class Hell ...
- Arduino 跑马灯
参考: 1. https://blog.csdn.net/hunhun1122/article/details/70254606 2. http://www.51hei.com/arduino/392 ...
- 数字PLL,什么是数字PLL
来源:http://www.elecfans.com/baike/bandaoti/bandaotiqijian/20100323203306.html 数字PLL,什么是数字PLL 数字PLL PL ...
- MySQL 修改表中的字段,使其自增
例如,我想使字段 id 自增. 1.查看表定义 mysql> DESC user; +----------+-------------+------+-----+---------+------ ...
- CodeForces 79D 【Password】,洛谷P3943 【星空】
其实我做的是洛谷的P3943,但是听说fstqwq窃题...... 题目描述: 小 C 拿来了一长串星型小灯泡,假装是星星,递给小 F,想让小 F 开心一点.不过,有 着强迫症的小 F 发现,这串一共 ...