- 论坛徽章:
- 0
|
#include <stdio.h>
#include <string.h>
void test1(char *t)
{
printf("%s\n",t);
}
void test2(char **t)
{
printf("%s\n",t[0]);
}
int main()//测试例子,出错处理就不写了^_^
{
int i=0,j=0;
char t2[]="asdfasdf";
char **t3;
char t4[5][10]={"11111","22222","33333","44444"};
t3=(char **)malloc(sizeof(char)*100);
t3[0]="asfas";
test1(t2);
test1(t3[0]);
test1(t4[0]);
test2(t3);
test2(t4);//这里会报段错误,不知道为什么 上面四个函数都可以正确执行
free(t3);
printf("end\n");
}
| 因为想传递一个字符串数组到一个函数中去使用字符串数组中的值, 采用的是 test2(t4)这句话这种形式,结果报段错误,于是写了上面的测试代码,哪位老兄解释 下为什么这样?
查书得到的结论是 函数参数为数组名时,形参和实参使用同一块内存地址,不知道为什么我用test2(t4)这种形式会报段错
我理解的一种解释是 t4的生存周期是在主函数中,到了test2函数中已不存在,所以报段错误;但是我测试中如test1函数用的一维数组确可以引用main函数中数组变量的值,所以比较困惑,他俩唯一的不同就是一是一维的 一个是二维的 ,还请各位指点下 多谢了 |
|