博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8、C语言 —— 指针
阅读量:5878 次
发布时间:2019-06-19

本文共 1214 字,大约阅读时间需要 4 分钟。

  hot3.png

1、什么是指针?

  • 直接引用:直接通过变量名来读写变量;

  • 间接引用:先通过变量名访问另一个变量的地址,再通过另一个变量来访问读写;

  • 用来存放变量地址的变量,就称为"指针变量"。

2、指针的定义

  • * 符号是一个说明符号,用来告诉系统这是一个指针变量

  • 指针变量的类型限制此指针变量只能指向该类型的变量地址

// 定义了一个只能指向整型的指针变量int *p;// 定义了一个只能指向字符的指针变量char *q;

3、指针的初始化

  • 指针先定义,再初始化

// 定义了一个int类型的变量int a = 10;// 定义了一个指向int类型的指针变量int *p;// 将变量a的地址赋值给p,所以指针变量p指向变量ap = &a;// 通过指针变量来修改变量a的值,*符号代表访问到指向的变量的值*p = 20;

  • 在定义的同时初始化

// 定义了一个int类型的变量int b = 10;// 定义了一个指向int类型的指针变量// 将变量a的地址赋值给q,所以指针变量p指向变量bint *q = &b;

4、初始化指针需注意事项

// 1、指针p未指向地址,不能随意赋值char *p;*p = 10;// 2、指针q的地址不能随意自己赋值char *q;q = 100;

5、指针所占用的内存空间

  • 在同一编译器环境下,一个指针变量所占用的内存空间是固定的。

  • 指针变量所占用的内存空间随编译器环境的变化而变化,但与数据类型无关,比如16位编译器环境下 int 和 char 类型的指针变量所占的内存是一样的

    092326_Lc0G_1444783.png

6、指针为什么还要分类型?

  • 上面说到,指针变量所占用的内存空间与数据类型无关,那为什么又要分类型呢,统一起来不是更方便。

  • 举个例子说明指针变量的类型有什么作用:

// 首先是在16位编译器下#include 
int main() {    int i = 2;    char a = 1;    char *p = &a;        printf("a = %d\n", *p);    // 输出的是:a = 1        // 但是如果上面的指针p类型换成int    // int *p = &a;    // printf("a = %d\n", *p);    // 输出的是:a = 513        return 0;}

  • 这就是为什么指针需要分类型,int 和 char 的指针变量p两次的值不一样,来看看内存分析吧:

    1、当指针变量p还是char类型或int类型,p都是占用2个字节

    094751_Mf7Y_1444783.png

    2、当p是char类型时,指针会读取一个字节的数据,即 0000 0010 = 1

    095037_19am_1444783.png

    3、当p是int类型时,指针会读取两个字节的数据,即 0000 0010 0000 0001 = 513

    095128_HN4v_1444783.png

转载于:https://my.oschina.net/cobish/blog/289596

你可能感兴趣的文章
【Java学习笔记】如何写一个简单的Web Service
查看>>
如何解决This system is not registered with RHN.
查看>>
Cocos2d-x学习笔记(两)Cocos2d-x总体框架
查看>>
拆解探索MagSafe电源接口结构和指示灯变颜色原理
查看>>
Android中EditText,Button等控件的设置
查看>>
lintcode:Remove Nth Node From End of Lis 删除链表中倒数第n个节点
查看>>
POJ 1915-Knight Moves (单向BFS && 双向BFS 比)
查看>>
linux编译安装LAMP
查看>>
php中的continue用法
查看>>
Android小游戏应用---撕破美女衣服游戏
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)
查看>>
软链接和硬链接详解
查看>>
HTML5 video 视频标签 常用属性
查看>>
深入理解javascript对象系列第一篇——初识对象
查看>>
Redis_master-slave模式
查看>>
qemu安装
查看>>
多媒体开发之rtmp---rtmp client 端的实现
查看>>
3.使用Maven构建Web项目
查看>>