C指针小结
来源:互联网 发布:数据库物理设计问题 编辑:程序博客网 时间:2024/05/01 05:31
1、二维指针的用法说明
a[i]从形式上看是a数组中的第i个元素。
如果a是一维数组,则a[i]代表a数组第i个元素所占的内存单元的内容。a[i]是有物理地址的,是占内存单元的。
但如果a是二维数组,则a[i]是代表一维数组名。它只是一个地址(如同一维数组名只是一个指针常量一样)。a,a+i,a[i], *(a+i), *(a+i)+j, a[i]+j都是地址。*(a[i]+j)和*(*(a+i)+j)是二维数组元素a[i][j]的值。
举例说明:
int a[3][4] = {1, 2, 3 };
a,*a; 第0行首地址和0行0列元素地址
a[0],*(a+0); 第0行0列元素地址
&a[0],&a[0][0];第0行元素首地址和0行0列元素地址
a[1],a+1; 第1行0列元素地址和1行首地址
&a[1][0],*(a+1)+0; 1列0行元素地址
a[2],*(a+2);2行0列元素地址
&a[2],a+2;第2行元素首地址
a[1][0],*(*(a+1)+0);第1行0列元素的值。
int a[2][3] = { 177, 19, 23, 10, 15, 6 };
int ** p;
p = (int **)a;
printf("*p = %d/n", *p); //177
printf("*(p+1)=%d/n", *(p + 1));//19
printf("*p + 1 = %d/n", *p + 1); //177+sizeof(int),因为*p是指针,+1此时指针下移一个位置。
2、除了多维指针外,比较容易混淆的还有:
[1]指针常量与常量指针。
指针常量是指针是常量,但其指向的数据可变。而常量指针则是指针指向的数据不可变,而指针本身可变。声明的方式分别是:
指针常量:Type * const pointer;
常量指针:const Type *pointer; 或者Type const* pointer;
[2]函数指针和指针函数
函数指针:指向函数的指针,可以指向一个函数;指针函数:返回指针的函数;声明的方式是:
函数指针:Type (*p)(形参列表); 例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
指针函数: Type *function(形参列表);
指针函数比较简单,但是要注意不要返回局部变量的地址,否则局部变量析构,导致指针悬挂。如果函数内部有分配空间,调用者需要负责回收资源。例如:
int *function()
{
int data[3] = { 1, 2, 3 };
return data;
}
[3]指向数组的指针和指针数组
指向数组的指针:<类型说明符>(*<指针名>)[<大小>]
指针数组:<类型名>*<数组名>[<大小>]
int (*pa)[2];//pa是一个指向一维数组的指针,该数组有2个元素,每个元素都是一个int;
int *pb[3];//pb是一维数组指针名,该数组有3个元素,每个元素是一个int*;
*(pb+i), pb[i]; 数组pb的第i个元素,每个元素都是int*
int a[2][3];
pa = a;
- C指针小结
- C指针小结
- [C++]指针知识点小结
- c指针小结
- C语言指针小结
- C/C++指针小结
- C指针小结1
- C指针小结2
- C指针小结3
- C指针类型小结
- C语言指针小结
- C语言函数指针小结
- C++【小结】1 - 内存指针
- C语言中的指针小结
- C指针的用法小结
- C语言函数指针小结
- 16、C语言指针小结
- C语言中的指针小结
- 合并动态数组
- 连接池
- 其实不想走,其实我想留
- 加密与认证
- 人人人
- C指针小结
- Spring 学习之 bean的前、后处理
- asp.net中实现Gridview的多行拖放, 以及跨控件拖放
- java 对于文件的操作
- 嵌入式Linux系统中的快速启动技术研究
- OpenGL系统设计-雾与混合 (1)
- VBS教程
- Runtime的简单应用
- 传智播客学习之JavaScript基础