#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. HNU OJ10320 穿越火线 简单模拟

    穿越火线 Time Limit: 10000ms, Special Time Limit:25000ms, Memory Limit:65536KB Total submit users: 12, A ...

  2. 设计模式_Bridge

    形象的例子: —早上碰到MM,要说早上好,晚上碰到MM,要说晚上好:碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦.不要问我“早上碰到MM新做了个发型怎么说”这种 ...

  3. 动态加载JS(css)文件

    <script language="javascript">document.write("<script src='test.js'><\ ...

  4. HDU-4635 Strongly connected 强连通,缩点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给一个简单有向图(无重边,无自环),要你加最多的边,使得图还是简单有向图... 先判断图是 ...

  5. jqgrid使用sql row_number进行分页

    背景 系统中使用了jqgrid的展示,现在要处理10w+的数据量 现状 使用了全查询的,查询到了10w+的数据放到了datatable中,每次页面刷新需要9秒多,并且传递给另一个dll来处理一些事情. ...

  6. Java HashMap 核心源码解读

    本篇对HashMap实现的源码进行简单的分析. 所使用的HashMap源码的版本信息如下: /* * @(#)HashMap.java 1.73 07/03/13 * * Copyright 2006 ...

  7. CentOS6.5安装nginx及负载均衡配置

    所有的安装包可以去以下地址下载,或者自行去官网下载,下面都有介绍. 所有安装包地址:http://download.csdn.net/detail/carboncomputer/9238037 原文地 ...

  8. 配置MySQL主从双向同步

    原文地址:http://www.cnblogs.com/zhongshengzhen/ 原主数据库:192.168.137.33 原从数据库:192.168.137.197   需要先阅读并操作:ht ...

  9. java的socket 编程

    之前在学校的时候,有时间但是总是学不进去,现在工作了,总想多学点东西,但是又是没有时间来学习,只能在工作的闲暇之余,给自己充充电,随着学习的深入,越来月发现Java真的很强大,几乎什么都可以做的,以下 ...

  10. The Sorrows of Young Werther

    The Sorrows of Young Werther J.W. von Goethe Thomas Carlyle and R.D. Boylan Edited by Nathen Haskell ...