#include<stdio.h>

 int main(void)
{
int a[]={,,,,};
int *p = (int*)(&a + );
printf("%d,%d\n",*a+,*(p-)); // int (*ptr1)[] = &a; √
// int (*ptr2)[] = a; ×
// int (*ptr1)[] = &a; ×
// int (*ptr2)[] = a; ×
} //2,5

数组名只可以作为右值!

当我们定义一个数组时候,编译器根据指定的元素个数和类型确定分配内存大小。并把这一块地址的名称赋为数组名称。

a[0]、a[1]......为数组元素,但并非元素名称!

指针,32系统总是为4字节(0x11111111)只能存放一个地址单元的值,所以总是存放的首地址。

但是访问时候需要根据类型大小来移动指针。

数组名:值等同于数组“首元素”的“首地址”(数组首元素的指针)

P + 1

char*移动一个字节,int*移动4个字节!数组指针移动一个数组元素类型长度!二级指针移动一个指针长度(4)!

&a:表示数组指针(取数组变量a的指针)

对数组的访问,总是转换为对指针的访问!

二维数组

 int b[][] = {{,},{,}};
// int *p2 = b; ×
// int (*p5)[2] = b; √
// int **p = b; ×

二维数组名称,指向首元素b[0]的指针,为数组指针【一级指针】!

 // int *p3 = b[0];             √
// int (*p4)[2][2] = &b; √

二维数组所有元素的访问(一级指针):

 #include<stdio.h>
int main()
{
int iArray[][] = {{,,},{,,}};
int *pArray = NULL; pArray = (int*)iArray; printf("array[0][0] = %d\n", *pArray);
printf("array[1][2] = %d\n", *(pArray + ));
printf("array[1][2] = %d\n", *(pArray + * + )); /*数组本身在地址空间中就是连续排列的*/
printf("array[1][2] = %d\n", *((int *)(*((int (*)[])pArray + )) + ));
return ;
}

二维数组所有元素的访问(数组指针):

 #include<stdio.h>

 int main()
{
int iArray[][] = {{,,},{,,}};
int (*pArray)[] = NULL; pArray = iArray; printf("array[0][0] = %d\n", **pArray);
printf("array[1][2] = %d\n", *(*(pArray+)+));
return ;
}
 int main()
{
int iArray[][] = {{,,},{,,}}; int (*pArray)[] = NULL; pArray = iArray; printf("array[0][0] = %d\n", pArray[][]);
printf("array[1][2] = %d\n", pArray[][]);
return ;
}

二级指针

为指向指针的指针,指向的值必须是指针。

 int main()
{
int iArray[][] = {{,,},{,,}};
int *ipArray[] = {iArray[], iArray[]};
int **pArray = NULL; pArray = ipArray; printf("array[0][0] = %d\n", pArray[][]);
printf("array[1][2] = %d\n", pArray[][]); return ;
}

c数组和指针的理解的更多相关文章

  1. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  2. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  3. 关于c语言二维数组与指针的个人理解及处理办法。

    相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...

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

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

  5. 对于C语言中数组名是指针的理解

    我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3, ...

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

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

  7. (C初学) 对数组与指针的一些浅显的理解

    因为课堂上没听懂,又看不懂教科书(<C语言程序设计教程>第3版 谭浩强,张基温编著)上晦涩的表达方式,昨天晚上特意拿<C语言入门经典>这本书自己研究了一晚的数组与指针. 先来一 ...

  8. 深入理解C/C++数组和指针

    C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文从各个角度论述数组和指针. 一.数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值.数组可以在某 ...

  9. 程序员之--C语言细节13(二维数组和指针,&amp;*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)

    主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...

随机推荐

  1. Jquery+asp.net后台数据传到前台js进行解析的方法

    所以在解析后台数据的时候,我们需要根据后台的数据情况,特殊处理和对待. 我这里后台用的是asp.net提供的wcf服务,也有ashx一般处理程序.大致原理差不多. C#中我们经常用的对象,有实体对象比 ...

  2. 配置OpenGL及第一个实例

    Windows环境下安装GLUT的步骤:1.将下载的压缩包解开,将得到5个文件2.在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VS,则应该是其安装目录下面的“VC\PlatformSD ...

  3. Linux新手必看:浅谈如何学习linux

    本文在Creative Commons许可证下发布 一.起步 首先,应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix问题1:版本的选择 北美用redhat,欧洲用SuSE, ...

  4. POJ-3744 Scout YYF I 概率DP

    题目链接:http://poj.org/problem?id=3744 简单的概率DP,分段处理,遇到mine特殊处理.f[i]=f[i-1]*p+f[i-2]*(1-p),i!=w+1,w为mine ...

  5. 解决dwr报错【 Error: java.lang.SecurityException: No class by name: service】

    打开包含dwr的网页时后台报错: 警告: Names of known classes are: __System DwrQueryService 十二月 11, 2015 10:24:44 上午 o ...

  6. WinForm中当TextBox重新获得焦点时输入法失效问题

    在winform 中,每当TextBox获得焦点时,部分输入法会失效(如智能ABC.五笔98.极品五笔等),需要重新切换输入法才能正常使用. 此时要将Form的ImeMode属性改为:OnHalf(或 ...

  7. jquery-ui 之draggable详解

    举一个例子: <div class="box"> <div id="draggable"> <p>Drag me aroun ...

  8. git 快速入门(二)

    一.引子 git代码托管的优秀工具之一, 其工作原理和svn截然不同.一旦拥有主干master分支权限, 只要在本地拉取主干分支, 可以随时随地切换分支. 它拥有众多优点,eg :支持在断网的情况下, ...

  9. mac磁盘满解决方案

    背景 : 用mac电脑的人,估计都不习惯去关机吧.mac虽然可以不需要关闭电脑,但是久而久之由于应用软件占用产生缓存文件 or 产生虚拟内容交换文件 or 睡眠镜像文件 and so on. 会占用大 ...

  10. cocos2d-x 将cocosbuilder输出文件映射成对象的原理

    转自:http://www.cnblogs.com/fox7nights/archive/2013/02/21/2920640.html 一.调用代码 CCNode* GameOverScene::l ...