首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

VC指针 有点东西不清楚了

2012-09-06 
VC指针 有些东西不清楚了定义指针char *fp1,*fp2,*fp3 //看起来是定义了char类型 指针fp1 指针fp2 指针fp

VC指针 有些东西不清楚了
定义指针char *fp1,*fp2,*fp3; //看起来是定义了char类型 指针fp1 指针fp2 指针fp3
但对于char* fp1,fp2,fp3; //看起来是定义了char类型指针 fp1 fp2 fp3,那么fp2 fp3是否为指针

对于char *fp1,*fp2,*fp3;//编译器是从右往左读的 对于char类型 是使用堆栈分配地址的 
fp1-8=fp2-4=fp3地址分配从右往左是由小到大的 
 那么VC分配地址是否分配的过程图和呢

[解决办法]
但对于char* fp1,fp2,fp3; //看起来是定义了char类型指针 fp1 fp2 fp3,那么fp2 fp3是否为指针
vc2008里fp2认为是char
windows好像都是从小到大分配内存地址的吧
[解决办法]
星号应该紧邻变量名,而非类型名。
虽然不管星号紧邻变量还是紧邻类型,都是一样效果,但像上面那样写,会造成误解。
char *fp1, *fp2, *fp3;
声明了三个 char 类型变量:*fp1, *fp2, *fp3。
char *fp1, fp2, fp3;
声明了三个 char 类型变量:*fp1, fp2, fp3。

C 语言只介绍说,* 放在指针类型前面表示对地址“解引用”,也就是说 * 加指针表示指针指向的变量类型,并没说 * 星号放在类型名后面是什么意义。可以这样理解:*fp1 是 char 类型,fp1 当然就是一个指向 char 类型的指针类型。在 Windows SDK 中,有这样的声明方式,我就觉得很好理解:
typedef char *PCHAR;
PCHAR pch = (PCHAR)&a;
[解决办法]
char* fp1,fp2,fp3 操作符*只是修饰fp1,fp2和fp3都是char类型的。
fp1是占4个字节,fp2和fp3占1个字节。压栈的顺序应该是fp1,fp2,fp3吧。
[解决办法]

探讨
char* fp1,fp2,fp3 操作符*只是修饰fp1,fp2和fp3都是char类型的。
fp1是占4个字节,fp2和fp3占1个字节。压栈的顺序应该是fp1,fp2,fp3吧。

[解决办法]
定义指针char *fp1,*fp2,*fp3; //看起来是定义了char类型 指针fp1 指针fp2 指针fp3
// 正确

但对于char* fp1,fp2,fp3; //看起来是定义了char类型指针 fp1 fp2 fp3,那么fp2 fp3是否为指针
// fp2和fp3不是指针

对于char *fp1,*fp2,*fp3;//编译器是从右往左读的 对于char类型 是使用堆栈分配地址的
fp1-8=fp2-4=fp3地址分配从右往左是由小到大的 
// 不太清楚LZ想表达什么,但是一般来说,栈是“倒”着的,即大地址在上,是栈底,然后在这个上下文,fp1最先进栈,地址最大,fp3后压栈,地址小。这个用debugger或者打印地址方式都可以看出来。

热点排行