【C/C++】深入理解指针和数组的关系
对数组名进行取地址运算
int a[] = {,,};
int (*p)[] = &a; //注意左值
对数组名取地址,得到的指针为指向整个数组的指针。
形参数组
形参为数组时勿须带数组长度,因为计算机不会处理,如果需要传数组长度,需要另外加参数。
一维数组指针
#include <stdio.h> //void array_add(int a[], int len)
void array_add(int *p, int len)
{
int i = ; for(i=; i<len; i++)
p[i]++;
}
int main(void)
{
int a[] = {,,};
int i = ;
int *p1 = a;
int (*p2)[] = &a;
int len = sizeof(a)/sizeof(int); array_add(a,len);
for(i=; i<len; i++)
printf("%d\t", a[i]);
printf("\n"); printf("a[1] = %d\n", *(p1+));
printf("a[1] = %d\n", p1[]);
printf("a[1] = %d\n", [p1]); printf("a[1] = %d\n", (*p2)[]);
printf("a[1] = %d\n", *(*p2 +)); return ;
}
二维数组指针
#include <stdio.h> //void array_add(int a[][], int len)
int array_add(int (*p)[], int row, int lines)
{
int i,j;
int result = ; for(i=; i<row; i++)
for(j=; j<lines; j++)
result += p[i][j]; return result;
}
int main(void)
{
//一个二维数组可以看做是两个一维数组,而a[0]和 a[1]分别是这两个一维数组的名字。
int a[][] = {,,,,,};
int (*p[])[] = {a, a+};
int (*p1)[] = a;//数组的名字代表指向数组首元素的首地址(这里二维数组的首元素是一个一维数组)
int (*p2)[][] = &a;//对数组名取地址之后,其指针指向整个数组,在这里p2指向整个二维数组,若p2+1,则跳过24个字节,即整个数组。
int *p3 = a[];
int (*p4)[] = &a[];
int b = a[][];
int *p5 = *a; //在这里a可以看做是指向行的地址,加*之后变成了指向列的地址。(这种描述方式只是便于理解)
int result = ; result = array_add(a, , );
printf("result = %d\n", result); printf("a[1][1] = %d\n", *(*(a+)+));
printf("a[1][1] = %d\n", *(*(p1+)+));
printf("a[1][1] = %d\n", p1[][]);
printf("a[1][1] = %d\n", (*p2)[][]);
printf("a[1][1] = %d\n", *(p3+));
printf("a[1][1] = %d\n", *(*(p4+)+)); return ;
}
【C/C++】深入理解指针和数组的关系的更多相关文章
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- C/C++指针和数组的关系
首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...
- C指针和数组的关系详解
1.C中数组和指针的关系 对于任意类型的数组arr,对于同类型的指针类型parr(确切一点,可以假设类型为int,即int arr[], *parr).它们之间有如下"内幕": 1 ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- c语言指针,数组
指针:说简单点就是一个地址.例如int *p,p是个变量,里面放的是地址0x0000,同理,每一个指针,不管什么类型,都是地址,也就是空间都是4个字节(32位机). 以此类推,指针也有指向它的指针in ...
- C语言-再论指针与数组
指针与数组的天生姻缘1.以指针方式来访问数组元素(1).数组元素使用时不能整体访问,只能是单个访问.访问形式有两种:数组形式和指针形式.(2).数组形式访问数组元素:数组名[下标]:(下标从0开始(3 ...
- C语言基础:指针类型与指针和数组、字符串的关系
//指针变量就是用来存储地址的,只能存储地址 格式: int *p; 这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
随机推荐
- [转载]eclipse的远程调试功能配置
原文地址:eclipse的远程调试功能配置作者:我的 用途:web应用部署并运行于外部(区别于eclipse环境中启动的)应用服务器中,当出现问题时,可以使用eclipse工程的源代码进行跟踪调试. ...
- cnblogs反对按钮点击测试
点击反对或推荐有惊喜~
- codeM 2018 资格赛
比赛链接:https://www.nowcoder.com/activity/2018codem/index?from=meituan 1.下单 给定若干商品,可以选择打折.满减两种方式. #incl ...
- linux 下查看磁盘IO状态
from:脚本之家 linux 查看磁盘IO状态操作 作者:佚名 字体:[增加 减小] 来源:互联网 时间:11-15 15:13:44我要评论 Linux系统出现了性能问题,一般我们可以通过top. ...
- 构建高性能数据库缓存之Redis(一)
一.Redis概述 1.1 什么是redis Redis是一个开源的用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key-Value数据库,根据DB-Engines.com站点月度排行的 ...
- 详解PV、UV、VV、IP及其关系与计算
一.什么是PV? PV即Page View,网站浏览量,指页面浏览的次数,用以衡量网站用户访问的网页数量.用户每次打开一个页面便记录1次PV,多次打开同一页面则浏览量累计.一般来说,PV与来访者的数量 ...
- Spring Boot中MyBatis的使用
orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开 ...
- 【Android】Android六种布局详解
这篇就对LinearLayout.RelativeLayout.自定义ViewGroup.FrameLayout.TableLayout.AbsoluteLayout六种布局进行详细的讲解. 1.Li ...
- 【jsp】jsp中的动作元素
一,动作元素(Action):预定义的java代码.目的在于代码的可重用性. 1,为请求阶段提供信息,允许在页面之间转移控制权. 2,JSP2.0规范定义了标准动作,标准动作是一些标签,影响JSP运 ...
- linux服务器rz命令上传文件
1.首先,要是服务器不支持rz命令的话,需要安装执行 yum -y install lrzsz 2.再输入rz -be命令,选择需要上传的本地文件