ZhiBing's blog(码上看世界) ZhiBing's blog(码上看世界)
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

ZhiBing Zheng

时间会回答成长
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • 编程语言

    • C++

      • shared_ptr(智能指针)
      • unique_ptr
      • bind函数
      • cout
      • C++ main函数的传入参数(argc, argv)
      • GLog使用
      • signals2
      • 编译期分派
      • 成员函数的调用效率
      • 返回值优化
      • 函数调用栈
      • 空类大小
      • 指针和数组的区别
      • 遵守三五原则
      • const限定符
      • static限定符
      • virtual限定符
      • 常用的CXX_FLAGS
      • 模版之AnyType
      • 模版之编译期断言
      • 模版之变参模板
    • Go

    • Python

    • shell

    • Rust

  • 调试

  • 开发者测试

  • 系统支撑

  • 性能优化

  • 通用领域
  • 编程语言
  • C++
zhengzhibing
2022-06-16

指针和数组的区别

# 指针和数组的异同

在 C/C++中,指针和数组这两个类型基本等价,指针名和数组名都表示的是地址,使用解除引用运算符*,可以得该地址指向的值。

char a[5] = {'q', 'x', 'r', 'v', 't'};
char* b = "abcd";
1
2

不同的是,数组名代表的是数组中第一个元素的地址,指针名就是指针指向的整个内存块的地址。

对数组名应用取地址运算符&,得到的是整个数组的地址,虽然数组的地址和数组的第一个元素的地址是一样的,但从概念上,&a[0]是一个 1 字节内存块的地址,而&a是一个 5 字节的内存块地址,tell+1是将地址值加了 1(因为是 char 类型,如果是 short,那地址值就加了 2),而&a + 1是将地址加了 5。

对指针名和数组名进行指针运算都是以其指向的类型(数组中元素的类型)的字节数为单位的。

在很多情况下,可以使用相同的方式使用指针名和数组名,比如可以使用方括号[]和*去获取元素的值。不同的是,指针名的值可以改变,但数组名却是常量;另外一点是,指针变量存的是一个指针,只是这个指针指向的是一块内存,所以对指针变量应用sizeof,不会得到其指向的内存块的大小,而是指针的长度,即使指针指向的是一个数组,对数组名而言,就不一样了,对其运行sizeof或得到数组的长度。

在指针和数组作为函数形参时,都是以指针变量的形式传递的。无论是下面的哪种方式:

void func1(char* c)
{
    ...
}
void func2(char c[])
{
    ...
}

void func3(char c[5])
{
    ...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#C++
上次更新: 2022/06/17, 07:22:19
空类大小
遵守三五原则

← 空类大小 遵守三五原则→

最近更新
01
HPE gen10 plus 安装ESXI 7
06-12
02
ESXI 7安装黑群晖
06-12
03
ESXI 7安装win10
06-12
更多文章>
Theme by Vdoing | Copyright © 2022-2024 ZhBing Zheng | 粤ICP备2022062743号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式