【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语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
随机推荐
- 输出控制台信息到日志 并 通过cronolog对tomcat进行日志切分
windows下tomcat默认并不会把控制台输出的信息都记录进日志文件.但是在生产环境中,出现问题时,控制台的日志输出是无法查据的,因此需要将日志记录下来. 解决方法: 输出日志到文件 修改tomc ...
- Easyui入门视频教程 第11集---Window的使用
目录 Easyui入门视频教程 第11集---Window的使用 Easyui入门视频教程 第10集---Messager的使用 Easyui入门视频教程 第09集---登录完善 图标自定义 ...
- VMware Workstation 10.0 简中绿色精简版
VMware Workstation是强大的虚拟机软件,能在一台机器上同时运行二个或更多Windows.DOS.LINUX系统,并进行开发.测试.部署新的应用程序.VMware10.0 延续VMwar ...
- 线程同步之mutex和Semaphore
表示之前对semaphore信号量木有神码概念. 比较纳闷这玩意要干嘛,好吧继续stackflow: Mutex can be released only by thread that had acq ...
- php bccomp的替换函数
if (!function_exists('bccomp')) { /** * 支持正数和负数的比较 * ++ -- +- * @param $numOne * @param $numTwo * @p ...
- [bug]WCF 内存入口检查失败 Memory gates checking failed
bug描述 异常信息:内存入口检查失败,因为可用内存(xxx 字节)少于总内存的 xx%.因此,该服务不可用于传入的请求.若要解决此问题,请减少计算机上的负载,或调整 serviceHostingEn ...
- jQuery.ajax发送image请求格式
1\请求端 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head run ...
- 转 linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值
引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...
- Maven for Eclipse 第一章 ——Maven的介绍
最近深陷与一个无比垃圾的项目无法自拔,好久没有更新文章了.今天简单介绍一下 Maven 在 Eclipse 中的使用.文章的内容几乎出于<Maven for Eclipse>一书,此书言简 ...
- 修改firefox/chrome浏览器的UserAgent
Firefox: about:config ---> useragent ---> general.useragent.override -> DIY_AGENT Chrome: 创 ...