v9 = 29 - ((int (__fastcall *)(CHAR *, int, CHAR *))lstrlenA)(&String, v6, &String)这句话怎么解释?

作者&投稿:徵顾 (若有异议请与网页底部的电邮联系)
~ 关键是((int (__fastcall *)(CHAR *, int, CHAR *))lstrlenA)(&String, v6, &String)的解释:
这部分的本质其实是一个函数lstrlen, lstrlenA是lstrlen的ANSI版本,
这里使用类型强制转换把lstrlenA函数的类型从
int WINAPI lstrlenA(LPCSTR lpString);
转换为
int (__fastcall *)(CHAR *, int, CHAR *)类型, 也就是说改变了参数的类型和个数,从而可以让lstrlenA可以接收三个参数(不知道楼主这段函数的用意).

调用过程中, 还是原来的函数, 三个参数应该是按照逗号运算的顺序, 最后一个逗号后面的表达式的值作为参数(看作一个字符串)传送给lstrlen, 计算字符串的长度.

调用过程, 可参照下面的程序实例:
#include <stdio.h>
#include <windows.h>

int main()
{
int v9, v6;
CHAR x = 0;
CHAR String = 'J';
CHAR y = 0;
v6 = 1;

v9 = 29 - ((int (__fastcall *)(CHAR *, int, CHAR *))lstrlenA)(&String, v6, &String);

printf("%d", v9);

printf("\n");

return 0;
}

补充: 上面说过了, 函数返回的应该是第三个参数指定的字符串的长度.


弥渡县19481363011: v9 = 29-((int (--fastcall *)(CHAR *, int, CHAR *))lstrlenA)(&String, v6, &String)这句话怎么解释?_
哈可参芍: 关键是((int (__fastcall *)(CHAR *, int, CHAR *))lstrlenA)(&String, v6, &String)的解释: 这部分的本质其实是一个函数lstrlen, lstrlenA是lstrlen的ANSI版本, 这里使用类型强制转换把lstrlenA函数的类型从 int WINAPI lstrlenA(LPCSTR lpString); ...

弥渡县19481363011: 使用数组实现如下工能:输入年月,输出此月份是该年份的的几天(编写一个程序) -
哈可参芍: #include <stdio.h> int days(int year,int month) { int k=(year%4==0&&year%100!=0)||(year%100==0&&year%400==0); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2:if(k==1) return 29; else return 28; case ...

弥渡县19481363011: 设向量u=(1,2, - 3),v=( - 1,2, - 2),w=(0, - 1, - 1) 求: 在线等 -
哈可参芍: 1、因为 |2u-3v|^2=4u^2-12u*v+9v^2=4*14-12*9+9*9=29 ,所以 |2u-3v|=√29 .2、|u|=√14 ,|v|=3 ,u*v=9 ,所以 cos<u,v>=u*v/(|u|*|v|)=9/(3√14)=3√14/14 .3、因为 w*(5u+2v)=(0,-1,-1)*(3,14,-19)=5 ≠ 0 ,因此不垂直.4、由于行列式|uT,vT,wT|= -9 ≠ 0 ,因此它们不共面 .

弥渡县19481363011: C语言 int x[][3]={{0},{1},{123}}; 花括号内的写法对么?如果正确,这个数组的具体元素是什么样子的? -
哈可参芍: int x[][3] ={ {0}, {1}, {123} }; 没有定义行数,根据初始化的参数看出,是一个三行三列的二维数组{0}是第一行...

弥渡县19481363011: 对C语言for循环的不解 -
哈可参芍: a[10]你这已经越界了,得到的值是无定义的.但你说等于30那就有可能是a[10]的地址就是j的地址.你加上句,输出它们的地址比较下.想要了解更多可以看点汇编知识,但要记住越界的结果都是无定义

弥渡县19481363011: 、以下程序段执行后sum 的值是( ). int a[3][3]={9,8,7,6,5,4,3,2,1}; -
哈可参芍: 本程序为2重for循环结构,初始化i、j、sum均为0,外循环终止条件i<3.程序执过程如下:1.外循环for的循环变量i=0 1.1 内for循环初值j=0, 终止条件j<3,步长1 1.1.1 sum=0+a[0][0]=0+9=9; 1.1.2 sum=9+a[0][1]=9+8=17; 1.1.3 sum=17+a[0][2]=...

弥渡县19481363011: C语言,输入一个日期,计算该日是当年的第几天 -
哈可参芍: 其实你这个题有两个错误,一个就是&,在C语言中,&是地址符,也就是说,最后输出的是d的地址, 在输入时需要&,就是需要地址才能找到存储的地方,在输出时则不需要, 你只要把&在输出的地方去掉就好 第二个就是你在判断师傅闰年时...

弥渡县19481363011: 求一个输出质数的c++ 程序 -
哈可参芍: #include <stdio.h> #include <math.h>int isPrime(int n) {int i,flag = 1;if((n == 2)||(n == 3)) return 1;if(n <= 1) return 0;for(i = 2; (i < sqrt((double)n))&&(flag); ++i)if(n % i == 0) flag = 0;return flag; }int main() {int n,an;do {printf("请输入一个正...

弥渡县19481363011: c语言:输入学生数并逐个输入学生身高,输出身高的平均值.要求编写一个能计算平均值的函数,参数为数组名 -
哈可参芍: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35#include <stdio.h>intmain(){ inti; scanf("%d",&i); intj; doublepingjunfen; intsum=0; for(j=1;j<=i;j++) { intnum; scanf("%d",&num); ...

弥渡县19481363011: 为什么 int - xyz=29 这一变量说明语句不合法?_
哈可参芍: 漏了结束处的分号.这样就可以了#include <stdio.h> int main(){ int _xyz = 29; printf("%d",_xyz); return 0; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网