C数组和指针
时间:2010-10-14 来源:libin1201119
1,C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来。然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外的一个数组,这样,要‘仿真’出一个多为数组就不是一件难事。
2,对于一个数组,我们只能做两件事:确定数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关的操作,哪怕它们乍看上去是以数组下标进行运算的,实际上都是通过指针进行的。
一个典型的例子:
int calendar[12][31];
int(*monthp)[31];
for (monthp=calendar;monthp<&calendar[12];monthp++)
{int *dayp;
for dayp=*monthp;dayp<&(*monthp)[31];dayp)
*dayp=0;
}
非数组的指针:
假定有两个字符串s和t,我们希望将这两个字符串链接成单个字符串r.借助库函数strcpy和strcat。
char *r,*malloc();
r=malloc(strlen(s)+strlen(t));
strcpy(r,s);
strcat(r,t);
分析:
1,malloc函数有可能无法提供请求的内存,这种情况下malloc函数会通过返回一个空指针来作为'内存分配失败'事件的信号。
2,给r分配内存在使用完之后应该立即释放,如果r是作为一个局部变量声明的,当离开r作用域时,r自动被释放了。该程序显式的给r分配了内存,为此就必须显式的释放内存。
3,前面的例程在调用malloc函数时并未分配足够的内存。字符串以空字符作为结束标志的惯例。如果strlen(s)的值是n,那么字符串实际需要n+1个字符的空间。所以必须为r多分配一个字符的空间。
作为参数的数组声明:
将数组作为函数参数毫无意义。C语言中会自动将作为参数的数组声明转换为相应的指针声明。
2,对于一个数组,我们只能做两件事:确定数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关的操作,哪怕它们乍看上去是以数组下标进行运算的,实际上都是通过指针进行的。
一个典型的例子:
int calendar[12][31];
int(*monthp)[31];
for (monthp=calendar;monthp<&calendar[12];monthp++)
{int *dayp;
for dayp=*monthp;dayp<&(*monthp)[31];dayp)
*dayp=0;
}
非数组的指针:
假定有两个字符串s和t,我们希望将这两个字符串链接成单个字符串r.借助库函数strcpy和strcat。
char *r,*malloc();
r=malloc(strlen(s)+strlen(t));
strcpy(r,s);
strcat(r,t);
分析:
1,malloc函数有可能无法提供请求的内存,这种情况下malloc函数会通过返回一个空指针来作为'内存分配失败'事件的信号。
2,给r分配内存在使用完之后应该立即释放,如果r是作为一个局部变量声明的,当离开r作用域时,r自动被释放了。该程序显式的给r分配了内存,为此就必须显式的释放内存。
3,前面的例程在调用malloc函数时并未分配足够的内存。字符串以空字符作为结束标志的惯例。如果strlen(s)的值是n,那么字符串实际需要n+1个字符的空间。所以必须为r多分配一个字符的空间。
作为参数的数组声明:
将数组作为函数参数毫无意义。C语言中会自动将作为参数的数组声明转换为相应的指针声明。
相关阅读 更多 +