(1)类型名称后面加上解引用修饰符*,就成为了某某类型的指针。指针的值就是内存地址,对指针的操作就是对内存地址的操作。

因为分配内存的持久性和灵活性,所以导致指针更加灵活,只要拥有指针,那么就能操作那块内存!

指针本质上是一个数字,内存地址本质上也是一个数字,只不过这个数字代表着一段可存放数值的内存。

指针的值可以是一块用malloc分配的内存的首地址,也可以是一块由C语言标准类型定义的变量的首地址。还可以是,只要有内存的地方,就能用指针的值代表!所以,指针本质上是和内存地址相互映射的,指针本质上是没有类型!但指针可以作为任何类型使用!

注:若程序员要使用指针,必须清晰知道指针所指向的内存的值究竟是什么,所指向的内存的大小究竟有多少!

如:

int* ptr = (int*)malloc(sizeof(int));

double* ptr2 = (double*)ptr;

char* ptr3 = (char*)ptr2;

char* ptr4 = (char*)ptr;

struct myStruct

{

int a;

};

struct myStruct* pStruct = (struct myStruct*)ptr; //可以转换为一个结构体的指针类型。

int myInt = (int)ptr; //直接赋值给整型变量也可以。

指针没有类型,每一个指针的大小都由计算机决定,若计算机是32位的,那么计算机最大的内存是2的32次方位,也就是4G,那么指针的大小就是32位,即4个字节。若计算机是64位的,那么计算机最大的映射内存是2的64次方位,可映射内存就很大很大,其指针大小也是64位,即8个字节。现在使用的指针,都是32位的指针,即使是现在的64位机器,也是32的内存地址。

(2)数组是一段连续的内存地址。数组下标从0开始,一直到数组大小减一的下标。数组有一维数组、二维数组、三维数组等等n维数组。

如【int myArray[10];】这里定义了存放连续10个int类型数据的数组。这种方式和在连续空间里定义10个int变量的意义是一样的。

如【int myArray[10][6];】这个是二维数组,第一维是10,第二维是6,其实,从编译器看,只要不是最后的维度,都存放着一个32位指针变量,这里第一维度是10个指针,第二维度才是真正的6个int类型数据内存。显然,这里是存了10个一维数组,每个一维数组都连续存储了6个int类型的变量。

如【double myArray[10][9][8];】这里很显然,最后一个维度8,才是真正存储double类型数据变量的,其他维度都存储着32位的指针地址。第一维是10,表示存了10个指针,每个指针指向一个一维数组,这种一维数组维度都是9,每个维度里都存放着指针,而这些指针都指向一个一维数组,每个数组维度都是8,连续存储了8个double类型的变量。

注:虽然数组里面存储了指针,但数组的内存地址必然是连续的,如【int myArray[10][6]】这里存储了10个6维的一位数组,每个6维的数组都在连续的内存地址上连续存放,存放完一个6维的数组,又连续继续存放第二个6维的数组。。。直到存放完所有的10个一维数组。

五、C语言指针和数组相关推荐

  1. itpt_TCPL 第五章:指针和数组 - 第八章:UNIX系统接口

    2016.10.11 - 01.09 个人英文阅读练习笔记(极低水准). 10.11 第五章:指针和数组 指针是保存一个变量的地址的变量.指针在C中被大量使用,部分是因为有时候它是唯一表达计算的方法, ...

  2. c语言指针与数组的深入理解

    引言:本篇再一次写到指针,学过c语言的都知道,指针是初学c语言时候遇到的一个比较难搞的知识点.你尽管可以想的简单,但是其实如果去用的话,没有一个更加深入的理解,那么后续的学习到数据结构就会艰难无比. ...

  3. c语言指针数组课件,C语言指针与数组教程课件.ppt

    C语言指针与数组教程;教学要求;本章主要内容;引子;#include void swap ( int x, int y ) { printf("调用时:x地址为:%p, 值为:%d\n&qu ...

  4. C语言 指针和数组区别 - C语言零基础入门教程

    目录 一.前言 二.指针和数组区别 1.通过 sizeof 获取大小 a.计算数组大小 b.计算指针大小 2.指针和数组赋值方式不同 a.指针赋值 b.数组赋值 3.指针是指针变量,数组是指针常量 三 ...

  5. c语言指针和数组的联系

    c语言指针与数组 **一.指针与一维数组** 1.一维数组的存储方式 2. 对一维数组名的理解 3. 数组下标和指针的关系 4.一位数组名与取数组首地址的区别 **二.指针与二维数组** 1.二维数组 ...

  6. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  7. 指针c语言与数组,C语言指针与数组

    C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝    -- Stan Kelly-Bootle 1. 数组并非指针 为什么很多人会认为指针和 ...

  8. c语言指针数组 难点总结,C语言指针与数组的难点分析.pdf

    C语言指针与数组的难点分析,c语言指针数组,c语言二维数组指针,c语言指针数组初始化,c语言函数指针数组,c语言数组与指针,c语言结构体数组指针,c语言指向数组的指针,c语言字符串数组指针,c语言数组 ...

  9. 游戏开发第一阶段笔记(3):C语言 指针与数组

    本期笔记内容: C语言 :28.指针于数组 通过27.指针运算的笔记我们已经知道: 指针类型加n,首地址向后移动 n*步长 个字节 指针类型减n,首地址向前移动 n*步长 个字节 #include&l ...

  10. c 语言 指针 指向数组,C 指向数组的指针

    您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容. 如果您对 C 语言中指针的概念有所了解,那么就可以开始本章的学习.数组名是一个指向数组中第一个元素的常量指针.因此,在下面的声明中 ...

最新文章

  1. 机器学习入门:线性回归及梯度下降
  2. 吴恩达 coursera AI 专项五第三课(上)总结+作业答案
  3. 购物场景的对话流程如何实现?
  4. 每列大于0的个数_题目1342——把一个数字减少到0的步骤数
  5. gcc/g++ 链接库的编译与链接
  6. java、c语言、python、c++的不同之处_总结几点C/C++、Java与Python的区别
  7. 【软件质量】改善结构松散的代码
  8. [C++] - 面向对象-图书管理系统
  9. 开着开着,Model S天窗飞了!特斯拉回应...
  10. 第二章 ELKstack部署及配置
  11. Python decorator
  12. 面试时,如何巧妙回答跳槽问题
  13. 小米笔记本、小米游戏本重装原装出厂镜像教程-有百度盘的提取码
  14. 开发者经验谈:如何一天时间搞定iOS游戏开发?
  15. JDK各个版本的特性分析|JDK7|JDK8|JDK9|JDK10|JDK11|JDK12|JDK13特性分析
  16. Android HotFix
  17. 肥学说电影(1)——双城之战
  18. 计算机硬盘分区win7,win7如何磁盘分区 教您win7磁盘分区
  19. 局部自适应阈值分割方法
  20. 设计一个算法求象棋这些棋子各代表哪些数字

热门文章

  1. Git:Github镜像网站
  2. 基于Three.js和MindAR实现的网页端人脸识别功能和仿抖音猫脸特效换脸的各种面罩实现(含源码)
  3. 基于javaweb的房屋租赁系统(前端+后端)
  4. NRF51822蓝牙初学笔记1.0之 GAP笔记
  5. 虚拟主机二级域名(m.dedehtml.com)绑定到织梦子目录(m)做手机站
  6. MongoDB学习笔记~对集合属性的操作
  7. linux ln -s
  8. Python Fitter 判断数据样本的分布函数拟合
  9. 给我5个带”一“字的成语
  10. K8S 1.18.0 以及KubeEdge 1.10.3 三机安装部署(含过程记录及遇到的报错和解决方法)