【c语言】数组和指针
来源:互联网 发布:大数据 图书 编辑:程序博客网 时间:2024/06/03 19:57
指针可以理解为一个变量,是一个专门用来存放地址的变量。
一级指针:
一级指针可如下定义
int *ptr = NULL;//整型指针,内容为空。 char* ptr = NULL;//char型指针,内容为空。 float* ptr = NULL;//浮点型指针,内容为空。
可如下使用:
int a= 10; int *ptr = &a;
char指针解引用只能访问一个字节大小,而int指针解引用能访问四个字节大小,故指针的类型决定了指针能访问多大空间
32位机器上,一个指针变量的大小为4个字节
64位机器上,一个指针变量的大小为8个字节
二级指针:
int a= 10; int *ptr = &a; int **pptr = ptr;
ptr 是个一级指针,指向a的地址,pptr 是个二级指针,访问ptr ,通过解引用操作找到a的地址。
一维数组
一维数组可通过下标的形式访问,存储方式为连续存储,故而可以用指针访问,用指针拿到第一个元素的地址,可通过加减等操作访问数组里其他元素的地址,但不可越界,一旦越界,指针将指向无法预知的地方,也会发生不可预知的错误。
在数组中因为我们的数组名即为数组首元素的地址,则可用指针进行如下访问:
int arr[5] = {1,2,3,4,5}int *ptr = arr;*(ptr+2)//表示ptr向后移动两个元素地址的大小并指向第三个元素的地址,然后进行解引用,拿到第三个元素。
这样,我们的ptr就指向了arr这个数组的首元素的地址。
- 二维数组
二维数组与一维数组的访问形式有所差别
int arr[2][2] = {{2,3},{4,5}};int *ptr = arr;int *pt = &arr[0][0];//拿到的是二维数组中第一个元素的地址
现在我们的ptr 指针指向的是arr这个二维数组,但是它指向的不再是首元素的地址,而是a[0](第一行)的地址。
指针与数组的关系
指针与数组可以互换,但不代表它们就是相等的,这里有一些它们的区别,(仅供参考,具体可看《c专家编程》的第四章与第九章)- 指针是保存数据的地址,而数组仅是保存数据。
2.指针通常用于动态数据结构,而数组通常用于存储固定数目且存储类型相同的元素。
3.指针通常指向匿名数据,而数组自身即为数据名。
- 指针是保存数据的地址,而数组仅是保存数据。
指针数组
指针数组即 数组元素为指针类型的数组,是一个数组。
int* arr[3];char* arr1[3];
如上,arr,arr1就是一个指针数组,但其arr 的三个元素类型是int * 类型的,arr1的三个元素类型为char * 类型。
数组指针
数组指针是一个指针,这个指针是指向数组的
int (*ptr)[5];char (*ptr1)[2];
如上,ptr , ptr1 是一个指针,指向一个数组,数组元素类型为int 型和char 型。
函数指针
函数指针使一个指针,这个指针指向一个函数。
int (*ptr)();
如上,ptr 是一个指针,这个指针指向一个函数,函数的返回类型是int 型的。
void (*signal(int sig, void(*func)(int)))(int);
signal 是一个函数,它返回一个函数指针,这个函数指针所指向的的函数有一个int 型参数,这个函数返回类型为void,而signal 这个函数的参数是这个函数指针指向的那个函数,即 void(*func)(int);
char * const*(*next)();
解析:next 是一个指针,指向一个函数,这个函数返回一个指针,这个指针指向一个只可读的指向char的指针。
以上两段代码是从《c专家编程》这本书上摘抄下来的,重点是分析这里的函数指针。《c专家编程》这一节内容还简化了第一个代码,有兴趣可以看看,在第三章。
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言 数组指针和指针数组
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言--指针数组和数组指针
- c语言指针和数组
- C语言指针和数组
- C语言指针和数组
- Yii2.0 批量插入数据
- 基于NCC模板匹配识别的应用
- Scala 数组(Array),列表(List),元组(Tuple),集(Set),映射(Map),迭代器(Iterator)
- SVN服务器搭建详解
- 【HDU6058】Kanade's sum(暴力 or 链表)
- 【c语言】数组和指针
- codeforces 833A
- 成为一个有目标的学习者
- Android性能相关常用命令收集
- Codeforces Round #427 (Div. 2) C. Star sky
- kubernetes资源对象--Volume
- 朋友推荐的其他分页方法
- Tomcat源码解析(5)
- Prime Path--(bfs)