感觉乱的指针题
1.
rev(*m)
{
*m++;
}
main()
{
int a;
int *p = &a;
rev(&a);
printf("%d,%d\n", a, *p);
}
2.
rev(*m)
{
*m++;
}
main()
{
int a;
int *p = &a;
rev(p);
printf("%d,%d\n", a, *p);
}
----------------解决方案--------------------------------------------------------
答案很简单:未定义行为!a未被赋初值!
想知道你的程序有多么糟糕吗?看下面:
$ gcc -Wall -W -pedantic -std=c99 -o bad bad.c
bad.c:1: 错误:expected declaration specifiers or ‘...’ before ‘*’ token
bad.c:2: 警告:返回类型默认为 ‘int’
bad.c: 在函数 ‘rev’ 中:
bad.c:3: 错误:‘m’ 未声明 (在此函数内第一次使用)
bad.c:3: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
bad.c:3: 错误:所在的函数内只报告一次。)
bad.c:4: 警告:在有返回值的函数中,控制流程到达函数尾
bad.c: 在顶层:
bad.c:6: 警告:返回类型默认为 ‘int’
bad.c: 在函数 ‘main’ 中:
bad.c:10: 警告:隐式声明函数 ‘printf’
bad.c:10: 警告:隐式声明与内建函数 ‘printf’ 不兼容
----------------解决方案--------------------------------------------------------