【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语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
随机推荐
- Ubuntu远程桌面,如何退出全屏
首先安装Linux 下远程桌面客户端软件-rdesktop 打开终端 执行sudo apt-get install rdesktop 远程连接XP 系统(前提是windows xp 必须打开并且允许远 ...
- Mac终端查看sqlite3数据库、表数据等(含sqlite可视化工具下载)
背景: 有时候,我们在用FMDB等库处理iOS数据库时,沙盒里保存的数据库格式为.sqlite3. 那么,我们如何查看这个数据库呢? 其实有两种方法: 1.借助工具 - Sqlite Database ...
- Selenium WebDriver使用IE浏览器 属性设置
System.setProperty("webdriver.ie.driver", "D:\\developsoft\\Selenium_Test\\IEDriverSe ...
- maven groupID 和 ArtifactID的区别与作用
GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构. ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称.一般Gro ...
- LAMP环境搭建实现网站动静分离[转]
目录: 1.环境概述 2.动静分离拓扑图 3.各服务器功能规划 4.各服务器基础环境配置 5.httpd安装配置 6.php安装配置及启用opcache加速功能 7.mysql安装配置 8.wordp ...
- resume.c
resume.c //采用CURLOPT_RESUME_FROM_LARGE 实现文件断点续传功能 #include <stdlib.h> #include <stdio.h> ...
- C# winform DataGridView 常见属性
C# winform DataGridView 属性说明① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行.列的隐藏和删 ...
- 新建MVC3 编译出现 System.Web.Mvc.ModelClientValidationRule
我在vs2010 新建一个Mvc3项目,编译报一下错误: 错误 1 'c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\A ...
- 记一次常规的Mysql数据库访问的时间分析
背景:记一次常规的数据访问的时间分析(插入操作) 1. TCP三次握手 SYN ---> <--- SYN,ACK ACK ---> 花费时间: 386.718-385.784=0. ...
- python opencv 按一定间隔截取视频帧
前言关于opencvOpenCV 是 Intel 开源计算机视觉库 (Computer Version) .它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. ...