博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试笔记 | 数组与指针的区别
阅读量:3788 次
发布时间:2019-05-22

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

1. 简述数组与指针的区别

  • 数组是直接访问数据的。
  • 指针是间接访问数据的。

定义:

  • 数组是类型相同、数目固定的若干个变量的有限集合,它存放的是数据。
  • 指针是变量的地址,存放的是变量的地址。

存储方式:

  • 数组通常存储在静态存储区或栈上。
  • 指针可以随时随地地指向任意类型的内存块。

内存容量:

  • 用运算符sizeof可以计算出数组的容量(字节数)。
  • sizeof(p)p为指针得到的是一个指针变量的字节数,而不是p多指的内存容量。
数组长度 = sizeof(数组名)/sizeof(数组名[0])

内容上的差别:

  • char a[] = "hello"数组指向每个数组元素。
  • char *p = "world"p指向字符串首地址指针。

2. 指针

  • 在32位操作系统下,指针是占4个字节空间大小,不管是什么数据类型。
  • 在64位操作系统下,指针是占8个字节空间大小,不管是什么数据类型。

多重指针

  • 由于指针变量存储的是指针所指向的内存地址,而指针变量自己所占有的内存空间也拥有一个地址,因此可以声明“指针的指针”,就是“指向指针变量的指针变量”,或者称为“多重指针”的应用。
int num = 10;  // 定义整数变量num,初值赋为10    int *ptr1 = #  // 定义指针变量 *ptr1,并指向整数变量num的地址    int **ptr2 = &ptr1;  // 定义指针变量ptr2,并指向指针变量ptr1 的地址

3. 数组

多维数组

例如,二维数组,其在内存中也是以线性方式分配数组的可用空间,当然二维数组的名称同样也可以代表第一个数组元素的内存地址。

int arr[3][5];
  • *(arr+0)表示数组中第一维维数0的第一个元素的内存地址,也就是arr[0][0],其他数组元素的内存地址依次类推。
  • *(arr+1)表示数组中第一维维数1的第一个元素的内存地址,也就是arr[1][0];
  • 如果想获取元素arr[1][1]的内存地址,应该是使用*(arr+1)+1
  • *运算符的优先级高于+运算符。
  • 如果再加上一个*取值运算符,也就是*(*(arr+i)+j),就可以使用双重指针表示法来获取二维数组arr[i][j]的元素值。

转载地址:http://fkztn.baihongyu.com/

你可能感兴趣的文章
GUAVA的常用方法汇总
查看>>
装饰器和门面设计模式介绍
查看>>
创建型模式——克隆模式
查看>>
JVM关闭和Hook钩子
查看>>
线程中断处理
查看>>
消息队列积压问题处理
查看>>
并行流使用注意事项
查看>>
泛型擦除机制及相关问题
查看>>
Jackson日期反序列化时区问题
查看>>
《设计模式》
查看>>
单例设计模式
查看>>
面试题集锦(一)
查看>>
Calendar类方法——编写万年历的两种方式
查看>>
File类的使用——遍历所有文件及子文件以及遍历删除
查看>>
内存流的使用——基本使用
查看>>
RandomAccessFile 类的使用——基本使用
查看>>
Properties实现类——基本使用
查看>>
结构型模式——装饰者设计模式
查看>>
线程的同步——Synchronized和ReentrantLock
查看>>
网络编程基础
查看>>