Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5206690
  • 博文数量: 553
  • 博客积分: 13864
  • 博客等级: 上将
  • 技术积分: 11041
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-28 21:25
个人简介

个人Blog: hhktony.com

文章分类

全部博文(553)

文章存档

2015年(1)

2014年(2)

2013年(12)

2012年(384)

2011年(154)

分类: LINUX

2012-02-07 19:51:29

  首先用一个实例来说明二维数组的第一维单元存储的是第二维的地址。如下:
int main(int argc, char *argv[])
{
    char arr[5][5];

    printf("%d\n", arr);
    printf("%d\n", arr[0]);
    printf("%d\n", &arr[0][0]);
    return 0;
}

三行输出结果是一样的,都是[0][0]元素的地址,也就是说二维数组名和第一维单元都表示数组首址,也是00元素的地址。相当于纵向一维的每个元素存的是第二维的索引地址。
      关于字符串有个实例情况说明:char *aa[2]={“abcd”,”ABCD”},显然这是指针数组的模式,所以数组的两个元素其实是两个字符串的首地址,而不是两个字符串,这个用法与char a[2][5]是一样的,第一维存的全都是地址。用%s格式输出aa[0],aa[1]就可以输出字符串。如下:
int main(int argc, char *argv[])
{
    char *str[2] = {"abc", "bcd"};
    printf("%s %s\n", str[0], str[1]);
    return 0;
}
得abc bcd。而且本身%S的参数本来就应该是字符串地址。另外注意的是指针的加减是以指针类型长度为单位,不是以字节为单位。

阅读(2535) | 评论(0) | 转发(0) |
0

上一篇:字符型常量

下一篇:输入输出重定向详解

给主人留下些什么吧!~~