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吧。
[解决办法]