C语言 多维指针注意问题
来源:互联网 发布:证券自动交易软件 编辑:程序博客网 时间:2024/06/06 17:41
不要把多级指针和指向数组的指针定义混淆:
char **p1;
char (*p2)[5];
char *p3 [5];
p1是二级指针,p2、p3级别等效为二级指针。
void main()
{
char **p1;
char a[10][5];
char(*p2)[5] = a;
p1 = a; //C语言(后缀名是.C的文件)中可以这样写,C++(后缀名是.cpp的文件)中这样写会报错
//查看a,p1+1和p2+1
printf("%0x,%0x,%0x",a,p+1,p2+1);
}
可以看出,p+1比a偏移了4个字节的地址,p+2比a偏移了5个字节的地址。
实验证明:可以让一个指向一维数组的指针去模拟二维数组的行为,把二维数组看成由大元素构成的一维数组。
指向一维数组的指针和普通二维数组可以在一起使用。
二维指针**p1可以看做元素是指针的一维指针数组*(*p),p1+1则偏移一个指针元素*p的大小,而指针是占4字节大小的地址,所以p1+1偏移了4个字节。
以下变量的含义以及偏移“1”走的距离:
int a[4][5]; //a+1?
int (*p1)[5]; //p1+1?
int **p2; //p2+1?
int *p3[5]; //p3+1?
可以让指针p1获得数组a的首地址,进而访问二维数组的各个元素,
可以让p2获得指针数组p3的首地址,进而访问指针数组各个元素
int *a[10];
//定义了一个一维指针数组,特殊在每个元素都是指针。
int **p = a;
a+1和p+1的结果是相同的。
结论:可让一个二级指针指向一维指针数组。
二级指针和一维指针数组可以在一起使用,效果等同。
可以让一个一级指针(*p)[N]指向一个二维数组a[M][N]。
一级指针(*p)[N]和二维数组a[M][N]可以在一起使用,效果等同。
定义指针数组的时候可以:
char* color[] = {"red","yellow","blue","green"};
指针数组color自动识别初始化时的元素个数(有几个逗号相隔),此题中color数组的大小为4,并接收每一元素的首地址(因为元素是字符串常量,所以接收的都是代码区地址).
- C语言 多维指针注意问题
- c语言多维指针笔记
- [C语言]多维数组指针
- c语言指针使用的注意问题
- C语言注意问题: 空指针
- 【C语言复习(十七)】多维数组和多维指针
- C语言深度剖析-----多维数组和多维指针
- C语言多维数组指针的技巧
- C语言中的多维数组与指针
- C语言多维数组与多级指针
- C语言多维数组与多级指针
- C语言多维数组与多级指针
- C语言多维数组与多级指针
- C语言 指针数组 多维数组
- 指针数组 多维数组C语言
- C语言 指针数组 多维数组
- C语言指向多维数组的指针
- C语言中的指针与多维数组
- 般 若 波 罗 蜜 多 心 经
- 联合(union)用法
- linux shell 快捷键(转帖)
- 我的感受——努力学java
- Java_BIO/NIO/AIO
- C语言 多维指针注意问题
- C语言获取系统环境变量
- SourceForge PhpEclipse安装过程
- Java_分布式java应用:基础与实践
- java mail 实践(简介)
- Java_PicoContainer
- IP TCP UDP 结构
- Java_PicoContainer
- 53的电话簿快速查找界面