数组指针和指针数组的区别,以及如何利用他们访问数组里面的元素
来源:互联网 发布:mac 应用程序图标 编辑:程序博客网 时间:2024/05/18 02:11
#数组指针和指针数组的用法c语言是学习中的难点但是理解之后接很轻松:
##1.首先数组指针是指针类型:char (*p)[2]; //代表一个指向有两个char 元素数组的指针。
##2.指针数组是指针类型: char *p[2]; //代表有一个数组元素,它有两个指针
int b[2][2]={1,2,10,4};//一个二位数组 int (*p)[2];//数组指针,指向一个int [2]型的数组, p=b;//令p指向数组a,数组名相当于&a[0][0]是整个数组的地址 //此处将数组名b的值付给了p就相当,p是数组名, int i=0; int j=0; for(;i<2;i++) for(j=0;j<2;j++) { cout<<p[i][j]; cout<<endl; } for(i=0;i<2;i++) for(j=0;j<2;j++) { cout<<*(*(b+i)+j)<<endl; } for(i=0;i<2;i++) for(j=0;j<2;j++) { cout<<*(*(p+i)+j)<<endl; }执行结果: 1 2 10 4 1 2 10 4 1 2 10 4可以看出三种访问结构一致:即数组名b所代表的含义与数组指针变量p所表达的的含义一致,所以b[i][j]的访问结果和 (*(p+i)+j的访问结果一致)
在此解释一下:加入数组名为a,&a和a的区别:
先看一段代码:
#include <stdio.h>
int main(int argc,char *argv[])
{
char a[6]={1,2,3,4,5,6};
int *ptr =(int *)(&a+1); // 在此将a的地址强转成int *类型的,这样就可以通过ptr来访问地址了;
printf("%d\n",*ptr);
printf("%d\n%d\n",*(a+2),*(ptr+1));
printf("%p\n",a+1);
printf("%p\n",&a+1);
}
执行结果如下:
-1526726656 (1)我们可以看到 *ptr 所指向的内容是乱码,那是因为&a代表(整个数组)的地址,&a+1代表跨越整个数组的
长 度(6bit)所以访问*ptr地址的内容,是不可预知的,这样做很危险;
3 (2)a是数组第一个(元素)的地址,所以加2后将向后移动2bit , 所以向后将访问到第三个元素是3
187848490 (3)同(1)的解释
0x7ffc7c18d071 (4)
0x7ffc7c18d076 (5)
- 数组指针和指针数组的区别,以及如何利用他们访问数组里面的元素
- 数组元素的访问-----指针
- 指针数组和数组指针的区别以及main函数
- 指针数组和数组指针的区别
- 指针数组和数组指针的区别
- 指针数组和数组指针的区别
- 数组指针和指针数组的区别
- 指针数组和数组指针的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 数组指针和指针数组的区别
- 函数分布
- Immutable 入门
- BUG_ON()和WARN_ON()的用法
- hdu In Action-最短路+01背包
- 2.1 Kotlin 搭建简单Kotlin 命令行开发环境
- 数组指针和指针数组的区别,以及如何利用他们访问数组里面的元素
- Github Pages 自定义域名
- 跨域传递cookie
- 阿里云香港vps亲测
- idea创建springcloud项目图文教程(创建服务提供者)(七)
- 用Battery Historian 3.0分析android手机电池消耗
- 解决异常:Cause: java.sql.SQLException: Field 'id' doesn't have a default value
- ReJava操作符 distinct 、Filter
- str2-jq-ajax