对数组名进行取地址运算

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++】深入理解指针和数组的关系的更多相关文章

  1. c/c++ 函数、常量、指针和数组的关系梳理

    压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...

  2. C/C++指针和数组的关系

    首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...

  3. C指针和数组的关系详解

    1.C中数组和指针的关系 对于任意类型的数组arr,对于同类型的指针类型parr(确切一点,可以假设类型为int,即int arr[], *parr).它们之间有如下"内幕": 1 ...

  4. C语言学习笔记--指针和数组的关系

    1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...

  5. c语言指针,数组

    指针:说简单点就是一个地址.例如int *p,p是个变量,里面放的是地址0x0000,同理,每一个指针,不管什么类型,都是地址,也就是空间都是4个字节(32位机). 以此类推,指针也有指向它的指针in ...

  6. C语言-再论指针与数组

    指针与数组的天生姻缘1.以指针方式来访问数组元素(1).数组元素使用时不能整体访问,只能是单个访问.访问形式有两种:数组形式和指针形式.(2).数组形式访问数组元素:数组名[下标]:(下标从0开始(3 ...

  7. C语言基础:指针类型与指针和数组、字符串的关系

    //指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的 ...

  8. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  9. 深入理解C语言中的指针与数组之指针篇(转载)

    前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...

随机推荐

  1. BigDecimal去除末尾多余的0

    Java有自带的 stripTrailingZeros() 方法用于去除末尾多余的0 BigDecimal num = new BigDecimal("100.000"); Big ...

  2. jquery.uploadify 在firefox会出现httperror

    原来是因为我的上传处理页面的page 继承了一个基类影响到的 然后这个基类 好像是因为在别的项目里面的原因 希望对也遇到这样的问题的人有帮助咯

  3. Ubuntu 13.04下安装WPS for Linux

    [日期:2013-06-03]   有人说Linux下不是有open office 和libre office么?是啊,可是将windows下的doc文档或者ppt放到Libreoffice上打开的时 ...

  4. HDUOJ-------单词数

    单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. Cordova笔记(一)

    跨平台的PhoneGap被Adobe收购,改名为Cordova,现在是Apache下的一款开源软件.网上能找到的关于PhoneGap的教程有些方法已不适用,在学习使用最新版的Cordova时有些问题需 ...

  6. MM bound 与 Jensen's inequality

    MM bound 与 Jensen's inequality 简森不等式 在使用最大似然估计方法求解模型最优解的时候,如果使用梯度下降(GD or SGD)或者梯度上升(GA or SGA),可能收敛 ...

  7. 【DeepLearning】Exercise:PCA in 2D

    Exercise:PCA in 2D 习题的链接:Exercise:PCA in 2D pca_2d.m close all %%=================================== ...

  8. memcached全面剖析--3.memcached的删除机制和发展方向

    下面是<memcached全面剖析>的第三部分. 发表日:2008/7/16 作者:前坂徹(Toru Maesaka) 原文链接:http://gihyo.jp/dev/feature/0 ...

  9. linux命令大全之watch命令详解(监测命令运行结果)

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  10. MVC2 扩展Models和自定义验证(学习笔记)

    当我们利用Visual Studio生成实体类以后,难免会用到验证功能(例如,用户登录时验证用户名是否为空,并加以显示). Visual Studio实体类:实体类 如果直接去编辑Visual Stu ...