C 指针用法辨析及汇总
来源:互联网 发布:淘宝开店怎么上传宝贝 编辑:程序博客网 时间:2024/04/28 10:12
——读 Kenneth A. Reek 著《C 和指针》的总结。
需要明确的是,指针的内容是其所指向的地址,间接访问操作符访问的是指针指向的地址,作为左值时,就是那个位置,作为右值时,就是那个位置的值。
指向整型变量的指针
指向整型变量的指针类型的变量,没啥好解释的。
int *pointer;
指向整型常量的指针
指针的内容,也就是指向的常量的地址可变,即该指针可以指向另一个整型常量,但指向的整型值各自是不变的。
int const *pointer;
指向整型变量的指针常量
(pointer constant)
图中依次是常量指针、设备 I/O地址、NULL指针和数组。
指针的内容,即指向的地址是字面值或常量,是不变的。但指向的整型值可变。
作为字面值时一般只会用于已知的设备地址,否则程序中一般无法了解一个变量的具体地址。使用时应使用强制类型转换,将整数转换为指针类型。
注意数组是矢量类型的数据,数组名本质上是一个指针常量,因此数组元素可以利用指针运算进行访问。
int *const pointer;(int *) 0xff2044ec;(int *) 0x0;int array[];
指向整型常量的指针常量
即指针内容不变,指针指向的内容也不变。
int const *const pointer;
指向数组的指针
第一个声明中,二维数组名是一个指向数组的指针(常量)。
第二个声明中,操作数 pointer 先进行聚组中的间接访问,说明它是一个指针,再进行下标引用,说明指向的是一个整型数组。
第三行对指针进行初始化。
注意区分指针数组和指向数组的指针,前者是数组元素是指针的数组。
int matrix[3][10];int (*pointer)[10];(*pointer)[10] = matrix;
指向结构的指针
结构和数组的重大区别在于,前者是一个标量,也就是需要通过名字来访问。结构不能够像数组那样进行指针运算和按地址访问。
另外,当结构作为函数参数时,进行的是传值调用,如果结构很庞大,会造成很大的开销。因此应该用指向结构的指针作为函数参数。
struct tag structname;struct tag *pointer = &structname;
指向函数的指针
函数名称本质上跟数组名类似,也是一个指针。
指向函数的指针有两个常见用途,一是转换表(jump table),二是回调函数(callback function)。
第一个声明中,首先进行间接访问,表示 f 是一个指针,再进行函数调用操作,表示 f 这个指针指向的是一个函数,这个函数返回整型值。
第二个声明中,需要一步一步的分析,f 是一个数组,数组元素是指针,指针指向的是函数,函数的返回类型是整型。
第三个声明中,与前者的唯一区别是,函数的返回类型是指向整型的指针。
int (*f)();int (*f[])();int *(*f[])();
指向指针的指针
如果 ppi 是静态变量,那么在声明后,pp 的值为0。
ppi被初始化后,才可以对 ppi 进行间接访问。
*pi 指向变量 i,其内容是变量 i 的值。
*ppi 指向pi,其内容是变量 i 的地址。
**ppi 内容是变量 i 的值。
int i;int *pi;int **ppi;pi = &i;ppi = π
- C 指针用法辨析及汇总
- C语言中数组与指针辨析
- C语言中数组与指针辨析
- C语言第四篇:指针的辨析
- 【C语言】数组与指针的辨析
- C语言小知识点 汇总4 指针及指针与数组
- 数组指针与指针数组及指针与数组的辨析
- C语言指针之二malloc的用法及详解
- C语言中指针的一些概念及用法
- C++各种指针辨析
- 辨析--数组,指针
- 数组和指针辨析
- 数组指针辨析
- 数组指针辨析答案
- C/C++指针知识点汇总
- C指针用法详解
- c++/c 函数指针用法
- C++中const指针用法汇总
- 让Bootstrap 3(兼容IE8浏览器)在IE8下未能自适应解决办法
- Java多线程——线程池与定时器
- sql语句
- Hello World 第一个程序
- 静态代码块 构造代码块 构造函数 区别
- C 指针用法辨析及汇总
- 设置UItextfiled的placehold的颜色和大小
- Educational Codeforces Round 13 Iterated Linear Function(数学)
- Git工作区和暂存区介绍
- mysql学习经验
- 本萌E助手的最新动态
- 增强型P沟道mos管(如si2333ds)开关条件
- 修改/etc/profile文件后不能使用linux命令
- Struts2 拦截器处理同步(普通Http)请求和异步(post,ajax)请求时拦截配置