C语言 指针例解
来源:互联网 发布:网络服务提供商与数据 编辑:程序博客网 时间:2024/06/05 02:55
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)【用来指向该内存地址所对应的变量或数组】。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值
本文侧重于通过几个例子,来解析指针。
数组和指针
1、
1 int a[5]={1,2,3,4,5};2 int *p=(int*)(&a+1);3 printf("%d\n",*(p-1));
/* a是一个数组名,也就是数组的首地址。 对a进行取地址运算符,得到的是一个指向数组的指针!!!!这句话尤为重要! 也就相当于 int (*p) [5] = &a; p=&a+1指向的是数组组a[4]的后面一个int单元, p-1指向a[4]=5 p是一个指针,它指向的是一个包含5个int元素的数组!! 那么执行p+1后,p的偏移量相当于 p + sizeof(int) * 5 !! 而程序中强制将指针p转换成一个int* 那么 p -1 其实就是 p - sizeof(int) 所以,p -1 指向了数组中得最后一个元素,也就是 5 */
2、
int a[]={1,2,3,4,5}; int*p[]={a,a+1,a+2,a+3}; int **q=p; printf("%d\n",*(p[0]+1)+**(q+2));
/* p[0]+1=a+1; *(p[0]+1)=2; *(q+2)=a+2; *(a+2)=3; 3+2=5; 其中p[0]=a也就是a[0]的地址, p[0]+1=a+1就是a[1]的地址, *(p[0]+1)就是a[1]的值就是2, **q=p --> *q=&p -->表示q保存的是p 的地址,q+2表示p[2]的地址,*(q+2)表示p[2], **(q+2)表示*p[2]表示*(a+2)就是a[2]的值就是3, 所以 *(p[0]+1)+**(q+2)=5 */
3、
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*pt)[4]=a; printf("%d\n",(*(pt+2))[2]);
/* 二维数组a[3][4]可以看做是{{1,2,3,4},{5,6,7,8},{9,10,11,12}}; (*(pt+2))[2]的值相当于 *(*(pt+2)+2) p[2]指向a[2]也就是a[2][0]的地址,所以p[2]+2指向a[2][2]的地址,其内容为11。 */
4、
int a[3][2]={1,2,3,4,5}; int *p[3]; p[0]=a[1]; printf("%d\n",*(p[0]+1));
// *(p[0]+1)所代表的数组元素是 a[1][1]
5、
static int a[]={5,4,3,2,1}; int *p[]={a+3,a+2,a+1,a}; int **q=p; printf("%d\n",*(p[0]+1)+**(q+2));
/* *(p[0] +1 ) = *( *(p+0) + 1) = *(a+3 +1) = a[4] = 1 **(q+2) = *(*(q+2) +0 ) =*( p[2]) = *(a+1) = 4; */
6、
int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p=&a[3]; int b=p[5]; printf("%d\n",b);
/* a可以理解为这个数组的首地址 a[3]是指向第4个元素 所以p指向第4个元素 p[5]是从p后的5个 也就是第9个元素 所以b=9 */
7、
int a[2][3]={1,2,3,4,5,6}; int *p; p=a[0]; printf("%d\n",*(p+3));
// *(p+3)所代表的数组元素是 a[1][0];
阅读全文
0 0
- C语言 指针例解
- c语言指针深解
- C语言指针略解
- C语言指针定义全解
- C语言 多级指针 解引用
- c语言指针的典例
- C语言中的指针
- C语言指针问题
- C语言野指针
- C语言之指针
- C语言指针简介
- C语言的指针
- c语言指针点滴
- C语言的指针
- c语言指针简介
- c语言 数组 指针
- c语言指针详解
- 理解C语言指针
- iOS UISlider的使用
- 在win10下使用vscode和winbash调试C代码
- HDU-2070 Fibbonacci Number
- CentOS7中systemctl的使用
- Mysql查询数据第二讲之单表查询
- C语言 指针例解
- 线性表——链式存储结构之循环双链表
- Tiny4412 Android5.0 定制键值相关的文件
- 动态规划——编辑距离
- 竖式问题
- 使用Lock与ReentrantLock模拟消息队列阻塞,生产与消费问题模拟
- java中集合List用法
- elasticsearch条件查询语句与聚合查询语句模板
- 【算法-简单数学问题】- 素数表的获取(简单方法和埃式筛法)