指针是C语言最重要的特性之一,

也是最容易被误解的特性之一。


现代计算机把内存分割为字节(Byte),

每个字节都有唯一的地址(Address),

如果内存中有n个字节,可以把地址看做0~n-1的数。

程序中的每个变量都占据字节(至少1字节),把第一个字节的地址称为”变量的地址”,

假设变量int i占有内存2000~2003,则变量i的地址是2000。

指针变量(pointer variable)

口诀:

变量有位置,位置有地址

指针是变量,其值为地址

指针就是地址,指针变量就是存储地址的变量。

C语言要求每个指针变量只能指向一种特定的类型的对象。

int *p;
double *q;
char *r;

指针变量的赋值:

int i=2099;
int* p;
P = &i;
printf("%d", *p);

值和地址

&取地址运算符

*间接寻址运算符

下例中:

i是普通变量,&i是存储变量的地址

p是指针,是地址,*p是指针指向地址的值

#include <stdio.h>
main() {
int i=2099;
printf("变量的值:%d\n", i );
printf("变量的地址:%x\n", &i ); int *p;
p = &i;
printf("指針(值):%d\n", *p );
printf("指針(地址):%x\n", p );
}

NULL指针

在变量声明时,如果没有确切的地址可赋值,为指针变量赋一个NULL值是一个良好的编程习惯。

赋为NULL值的指针称为“空指针”。

#include <stdio.h>
int main(int argc, char *argv[]) {
int *ptr = NULL;
printf("ptr的值是:char=%x, int=%d\n",ptr,ptr); return 0;
}

运行结果:

ptr的值是:char=0, int=0

C语言讲义——指针(pointer)的更多相关文章

  1. C语言讲义——指针函数和函数指针

    指针函数 返回值是指针的函数,如void* malloc(...) #include<stdio.h> #include<stdlib.h> #include<strin ...

  2. 为什么C/C++语言使用指针

    这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...

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

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

  4. Golang 中的指针 - Pointer

    http://www.cnblogs.com/jasonxuli/p/6802289.html   Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int ...

  5. C语言中指针和数组

    C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...

  6. 编程基础-c语言中指针、sizeof用法总结

    1.指针 学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的. ...

  7. 快速上手系列-C语言之指针篇(一)

    快速上手系列-C语言之指针篇(一) 浊酒敬风尘 发布时间:18-06-2108:29 指针的灵活运用使得c语言更加强大,指针是C语言中十分重要的部分,可以说指针是C语言的灵魂.当然指针不是万能的,但没 ...

  8. go语言的指针类型

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

  9. Go语言学习——指针、new和make

    指针 Go语言中不存在指针操作,只需要记住两个符号: &:取地址 *:根据地址取值 vscode 打开多个标签页 settings.json中输入"workbench.editor. ...

随机推荐

  1. 回顾C#各版本特性

    C# 6.0 Read-only auto-properties(只读自动属性) 以前版本,声明只读属性时,示例: public string FirstName { get; private set ...

  2. 【译】Rust,无畏并发

    原文链接:https://dev.to/imaculate3/fearless-concurrency-5fk8 > 原文标题:That's so Rusty! Fearless concurr ...

  3. Python彩蛋、字典、列表高级用法、元类、混入、迭代器、生成器、生成式、git

    一.类与类的关系 关注公众号"轻松学编程"了解更多. is-a 继承 继承是指一个类(称为子类.子接口)继承另外一个类(称为父类.父接口)的功能, 并可以增加它自己的新功能的能力. ...

  4. Markdown tricks

    编辑排版 仅仅了解 Markdown 语法还不够,知道这些 排版技巧 增色您的文章内容. 空格和空行 留白,从艺术角度上说,留白就是以"空白"为载体进而渲染出美的意境的艺术.从应用 ...

  5. 庐山真面目之二微服务架构NGINX版本实现

    一.简介          在上一篇文章<庐山真面目之微服务的简介和技术栈>中,我们已经探讨了微服务的来龙去脉,也说了想要实现微服务架构所需要的技术栈,今天我们开始实现一个微服务,当然这个 ...

  6. Java中的有关日期的对象

    目录 Date SimpleDateFormat Calendar 常用方法 Java8中用于计算时差的类 1. Period(以年月日来表示日期差) 2. Duration(以秒与毫秒来表示时间差) ...

  7. 【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!

    前言 说到 Elasticsearch ,其中最明显的一个特点就是 near real-time 准实时 -- 当文档存储在Elasticsearch中时,将在1秒内以几乎实时的方式对其进行索引和完全 ...

  8. Kafka_2.12-2.5.1集群搭建与参数调优

    Kafka是目前业界使用最广泛的消息队列.数据流转常见这样的业务场景,客户端把采集到的日志推送给Kafka,业务方可以消费Kafka的数据落地HDFS,用于离线分析,也可以使用Spark或Flink消 ...

  9. Java_垃圾回收机制(未掌握)

    垃圾回收机制 任何一种垃圾回收算法一般要做两件基本事情: 发现无用的对象(没有任何变量引用该对象) 回收无用对象占用的内存空间 垃圾回收相关算法: 引用计数法, 引用可达法 分代垃圾回收机制: 不同的 ...

  10. JavaSE基础语法学习

    标识符 表示类名的标识符用大写字母开始. 表示方法和变量的标识符用小写字母开始,后面的描述性词以大写开始. 注意 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($).或者下划线(_)开始 ...