一道题进制转换问题搞了半天,最终发现是数组越界,实在郁闷!
源程序如下:
#include<iostream>
using namespace std;
int main()
{
unsigned int n;
cin>>n;
char a[4];
int i=0;
while(n>0)
{
a[i]="0123456789ABCDEF"[n%16];
n=n/16;
i++;
}
i--;
for(;i>=0;i--)
cout<<a[i];
return 0;
}
程序一开始没有i--,我找来找去找不到错,后来发贴到论坛,
结果一句话郁闷死我。怪不得!可惜永远在别人指出问题后喊怪不得是
没用的,这是一次教训,只有吸取了本次教训,以后犯同样错误的机率就
小多了。我相信跟我一样的人应该也有的吧,看来调试程序是一门大大的
学问,绝不输给编程。
#include <iostream>
using namespace std;
void fac(int*);
int *p=NULL;
void fac(int* pt) //这里p传给pt;
{
pt=&b; //这里为什么pt没有修改p的值呢;使之指向b
}
首先先看pt的定义 : int *pt;这里定义了pt为指针变量,它专门保存数据
变量地址pt=&b;它保存了b的地址,但没任何意义,因为pt是内部变量
int main()
{
int a=5;
p=&a; /* p是指针变量,也是专门保存地址的,它保存了a的地址 */
fac(p); /* 把这个地址做为参数值调用fac,但p的值仍然为a地址 */
cout<<*p<<endl; /* 这里输出当然是输出a地址上的数据 */
return 0;
}
修改的话,就要连指针变量所保存的地址也一起修改,这就需要二级指针
指针:保存数据地址
二级指针:保存指针地址
三级指针:保存二级指针地址
...
修改
void fac(int **pt) {
*pt=&b; /* 注意书写格式 */
}
void main(
...
fac(&p); /* 注意书写格式,这里修改了原本保存在指针p里的地址 */
...
}
从这道题可以看出,我对传指针这一概念还没完全弄懂,虽然知道结果
会怎么样,但是就是解释不来。所以需要在这块内容上补一补,弄懂
传指针比较重要。