中国青基会
RSS
热门关键字:  None  linux+moodle安装  mac  rhel5  199
当前位置 : Nixsky>程序设计>c/c++>列表

C语言之指针、数组和函数

来源: 作者: 时间:2007-03-24 点击:

  下面的代码演示了这种动态数组的用途:
// 用于从文件中读取以 '\0'结尾的字符串的函数

extern char *getline(FILE *pFile);
FILE *pFile;
char **ppText = NULL;
// 二维动态数组指针

char *pCurrText = NULL;
// 指向当前输入字符串的指针

ULONG ulCurrLines = 0;
ULONG ulAllocedLines = 0;
while (p = getline(pFile)
{
 if (ulCurrLines >= ulAllocedLines)
 {
  
// * 当前竖向空间已经不够了,通过realloc对其进行扩展。

 ulAllocedLines += 50;
// 每次扩展50行。

  ppText = realloc (ppText, ulAllocedLines * (char *));
  if (NULL == ppText)
  {
   return;
// 内存分配失败,返回

  }
 }
 ppText[ulCurrLines++] = p;
// 横向“扩展”,指向不定长字符串

}
问题:指针数组与数组指针与指向指针的指针
  指针和数组分别有如下的特征:
  指针:动态分配,初始空间小
  数组:索引方便,初始空间大
  下面使用高维数组来说明指针数组、数组指针、指向指针的指针各自的适合场合。
   多维静态数组:各维均确定,适用于整体空间需求不大的场合,此结构可方便索引,例a[10][40]
   数组指针:低维确定,高维需要动态生成的场合,例a[x][40]
   指针数组:高维确定,低维需要动态生成的场合,例a[10][y]
   指向指针的指针:高、低维均需要动态生成的场合,例a[x][y]
  问题:数组名相关问题
  假设有一个整数数组a,a和&a的区别是什么?
  答案与分析:
  a == &a == &a[0],数组名a不占用存储空间。需要引用数组(非字符串)首地址的地方,我一般使用&a[0],使用a容易和指针混淆,使用&a容易和非指针变量混淆。
  区别在于二者的类型。对数组a的直接引用将产生一个指向数组第一个元素的指针,而&a的结果则产生一个指向全部数组的指针。例如:
int a[2] = {1, 2};
int *p = 0;
p = a; /* p指向a[0]所在的地方 */
x = *p; /* x = a[0] = 1*/
p = &a; /* 编译器会提示你错误,*/
/*显示整数指针与整数数组指针不一样 */
问题:函数指针与指针函数
   请问:如下定义是什么意思:
int *pF1();
int (*pF2)();
  答案与分析:
  首先清楚它们的定义:
   指针函数,返回一个指针的函数。
   函数指针,指向一个函数的指针。
  可知:
   pF1是一个指针函数,它返回一个指向int型数据的指针。
   pF2是一个函数指针,它指向一个参数为空的函数,这个函数返回一个整数。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册