《C语言教程》12章 指针和数组、字符串

[复制链接]
891|3
 楼主| niuyaliang 发表于 2015-3-17 20:13 | 显示全部楼层 |阅读模式
一、数组和指针的关系
char型的指针数组相当于二维字符数组,并不等于说指针数组可以直接转化为二为字符数组,相反字符数组可以直接转化为指针数组。因为二维字符数组的地址是连续的,而指针数组所指的元素不一定连续(如下的m1、m2、m3的地址可以不连续,长度也可以不一样)。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:15 | 显示全部楼层
二、指针数组
char型的指针数组相当于二维字符数组,并不等于说指针数组可以直接转化为二为字符数组,相反字符数组可以直接转化为指针数组。因为二维字符数组的地址是连续的,而指针数组所指的元素不一定连续(如下的m1、m2、m3的地址可以不连续,长度也可以不一样)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:16 | 显示全部楼层
三、指向指针的指针
在第一章讲main()函数的参数时,已经见过指针的指针,这和指针数组有相同的作用,但还是有细小的区别。指针数组可以在定义时直接初始化,而指向指针的指针不行。正如二维数组一样,不指定第二维长度不能直接初始化一样。即不能char str[][]={"...", "...", ...}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:17 | 显示全部楼层
四、指针的长度
让许多初学者遗憾的是,C语言没有提供数组长度的函数,但可以用sizeof()运算符先求数组的总长度,再求出数组类型的长度,二者相除便得到数组的长度。C语言更大的一个遗憾便是,sizeof()对指针变量求值时,结果总是4,这是因为指针变量的内容是地址,地址总是4个字节来表示。
因此有经验的编程人员,在用指针作参数时,一般总是同时多定义一个参数,来存放其长度。也就是指针和其长度同时传递过去。另外,数组长度如果事先知道,一般定义为常量。

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     char *msg[] = {"www.quanxue.cn",
  5.                    "www.51minge.com",
  6.                    "这儿是小雅的C语言教程"};
  7.     double dNum[] = {12.5, 24.55, 100.83};
  8.     double *p = dNum;

  9.     printf("dNum的size:%2d, 数组个数是:%d\n", sizeof(dNum), (int)sizeof(dNum)/sizeof(double));
  10.     printf("   p的size:%2d, 数组个数是:%d\n", sizeof(p   ), (int)sizeof(p   )/sizeof(double));
  11.     printf(" msg的size:%2d, 数组个数是:%d\n", sizeof(msg ), (int)sizeof(msg )/sizeof(char *));

  12.     return 0;
  13. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部