当前位置:  编程技术>c/c++/嵌入式

c语言中数组名a和&a详细介绍

    来源: 互联网  发布时间:2014-10-18

    本文导语:  最近又把学习c语言提上日程上来了~~~先把我打算看的书都写下来吧,,系类, 先说说a和&a的区别(有三点,三个方向):1.是a和&a的本质,都是什么类型的。2.从2维数组的角度看。3.从指针运算的角度看。 声明:虽然数组名不是...

最近又把学习c语言提上日程上来了~~~先把我打算看的书都写下来吧,,系类,

先说说a和&a的区别(有三点,三个方向):
1.是a和&a的本质,都是什么类型的。
2.从2维数组的角度看。
3.从指针运算的角度看。

声明:虽然数组名不是指针,但是用的很像指针,我们暂且把它叫做一个指针吧。

第一个问题:
int a[10];  a ,&a和&a[0] 都是分别是什么?先说明a ,&a和&a[0]三个值是的相等哈。

a叫做数组名,是数组首元素的地址,也就是&a[0]的值。像是一个指针类型,是一个int型的指针类型,int *,先理解成指针吧。

&a这才是一个真正的指针,是一个数组指针。是数组的地址。

切记:&a不是指向指针的指针,因为&a和a的值相等,但是*&a和*a的值不相等。*&a和a的值一样,说明*&a仅仅是对这个数组指针进行了取值,取得的是数组的值,即数组首元素的地址,而不是对&a这个地址进行了取值。这个应该是c语言中针对数组指针运算的规定。 

这里的数组指针&a取值之后,变成了a,是a,不是*a,变成了这个数组的数组名,或者说是数组首元素的地址。

我做了如下实验:

代码如下:

#include
 int main()
 {
         int a[5]={1,2,3,4,5};
         printf("a=%xn",a);
         printf("&a=%xn",&a);
         printf("*(int*)&a=%xn",(*((int *)(&a))));
         printf("*&a=%xn",(*(*(&a))));
         printf("&a[0]=%xn",&a[0]);
         printf("*&a[0]=%xn",*(&a[0]));
         return 0;
 }


代码如下:

printf("*(int*)&a=%xn",(*((int *)(&a))));

这句没有像常规的一样对&a进行取值,而是强制类型转换了一下,可见这个不是一个指向指针的指针。

第二个问题:
二维数组中的利用指针来遍历的方式,也不是一个指向指针的指针(2级指针) ,这句printf("%dn", *(*(a+i) + j));  *(a+i)也就是将数组指针取值获得数组的首元素地址,常常的误区就是数组指针的取值运算和普通的指针取值运算不一样。数组指针取值运算类似一个强制类型转换的过程。    

注意:二维数组的数组名a,是第一个一维数组的数组指针,*a就是第一个一维数组的数组名。也可以直接用tpye *强制类型转换。

代码如下:

 #include

 int main(int argc, char* argv[], char* env[])
 {
    int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
    int i = 0;
    int j = 0;

    for(i=0; i

    
 
 

您可能感兴趣的文章:

  • c语言合并两个已排序数组的示例(c语言数组排序)
  • 问一个c语言问题:变长数组与全局变量
  • C语言构建动态数组完整实例
  • c语言动态数组示例
  • C语言安全编码之数组索引位的合法范围
  • C语言求连续最大子数组和的方法
  • C语言中全局数组和局部数组的问题
  • c语言中用字符串数组显示菜单的解决方法
  • C语言二维数组的处理实例
  • C语言安全编码数组记法的一致性
  • C语言 结构体动态数组内存释放问题
  • C语言数组指针的小例子
  • Linux下C语言怎样从键盘读入一个十六进制字符数组
  • C语言中多维数组的内存分配和释放(malloc与free)的方法
  • C语言安全之数组长度与指针实例解析
  • 约瑟夫环问题(数组法)c语言实现
  • 深入理解c语言数组
  • C语言小程序 数组操作示例代码
  • C语言柔性数组实例详解
  • c语言字符数组与字符串的使用详解
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 谁能简单介绍一下LINUX上的各种语言脚本的功能.
  • PHP编程语言介绍及安装测试方法
  • 请各位推荐几本UNIX下C语言编程学习的书!!(电子书籍也可)最好能详细介绍文件操作的!!!万分感谢!!!
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 请介绍一两本精典的JSP书籍,我要去买了,已有JAVA语言基础!
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • 我是新手,,我想学习Java语言,但对它的用途还不了解,,能给介绍一下吗?谢谢!
  • HTML 脚本语言介绍及<script>标签用法
  • 详细介绍Python语言中的按位运算符
  • 基于C语言char与unsigned char的区别介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 2013年7月和2013年8月编程语言排行榜
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • c语言实现MD5算法完整代码示例
  • C语言中间语言 CIL
  • c语言基于libpcap实现一个抓包程序过程
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.
  • HTML超文本标记语言教程及实例
  • 动态编程语言 LIME编程语言
  • MD5算法的C语言实现
  • C语言如何改变当前语言环境
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 如何在VIM中使汇编语言和C语言自动缩进?
  • HTML 超文本标记语言简介
  • 我安装的linux时默认语言选择的是中文,又乱码,怎么可以解决?怎么更改默认语言成英文?
  • HTML语言特殊字符大全及其编码对照表(包括转义方式)
  • Redhat9安装时语言只选择了中文,现在还能再增加其它语言的支持吗?如英文
  • 据说这是史上最变态的6个C语言Hello, World程序
  • 请问哪里有ubuntu 9.0版本的中文语言包和KDE的中文语言包下载,我用Google搜索了很多地方都没有!




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3