指针的奇技淫巧一__认识指针

指针是一个C语言中比较重要的概念,C语言对内容管理的技巧也逃不掉指针的概念。这边我结合《深入理解C指针》这本书做了一些笔记。

为什么要精通指针

  • 写出快速高效的代码
  • 为解决很多类问题提供方便的途径
  • 支持动态分配内存
  • 使表达式更加的紧凑和简洁
  • 提供用指针传递数据结构的能力而不会带来庞大的开销
  • 保护作为参数传递给函数的数据

声明指针

通过在数据后面跟星号,再加上指针变量名字就可以声明一个指针

1
2
int num;
int *pi

星号两边的空白符无关紧要,下面的声明等价

1
2
3
4
int* pi
int * pi
int *pi
int*pi

*将变量声明为指针,这是一个重载过的符号,它也用在乘法和解引指针上

如何阅读声明

阅读一个指针推荐的阅读方式是重后往前读。

理解 声明
pci是一个变量 const int *pci
pci是一个指针变量 const int *pci
pci是一个指向整数的指针变量 const int *pci
pci是一个指向整数常量的指针变量 const int *pci

地址操作符

地址操作符&会返回操作数的地址。我们可以用这个操作符来初始化pi指针

1
2
3
num = 0;
pi = #

可以在声明变量pi的同时把它初始化为num地址

1
2
int num;
int *pi = #

尽快的初始化指针是一个好习惯

1
int *pi = null;

打印指针的值

1
2
3
4
int num = 0;
int *pi = #
printf("Address of num :%d value:%d \n",&num,num);
printf("Address of pi :%d value:%d \n",&pi,num);

输出

这里输出的真实地址用:地址A,地址B表示

1
2
Address of num :地址A value :0
Address of pi :地址B value :地址A

用间接引用操作符解引指针

(*)一般称为解引指针,我们可以把解引操作符的结果用作左值,术语左值是指赋值操作符左边的操作数所以有左值都必须可以修改,因为它会被赋值

总结

  1. 指针的值是指针指向的地址
  2. &pi,是指针的地址
  3. *pi,是指针指向变量的内容,俗称解引
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~