LoadRunner 脚本学习 -- 指针基础

时间:2023-03-08 20:05:30
LoadRunner 脚本学习 -- 指针基础

先搞清楚 ++a 和 a++的区别

++a : 前缀++,  先自增,后表达式

a++ : 后缀++,  先表达式,后自增

前缀,自增立即生效。

后缀,下次才会看到效果。

一维数组的指针

Action(){
int score[]={,,,};
int *p=score;
int i; for (i=;i<=;i++)
lr_output_message("kkk=%d",*p++); return ; }

*p++: 指针取值,并向后移一位

*(p++): 很蛋疼的理解。 ++ 是后缀,前后缀的威力最大,因此同*p++ 。 也可以这么理解,指针p++移一位,但因为是后缀,下次移动才生效,所以效果是等同于*p++

Starting action Action.
Action.c(8): kkk=100
Action.c(8): kkk=98
Action.c(8): kkk=78
Action.c(8): kkk=55
Action.c(8): kkk=0
Ending action Action.

数组申明是[5],实际只有4个数,第5个则为0.

*++p: ++为前缀,那就是p先移一位并立马生效的,再取数组的值

Starting action Action.
Action.c(8): kkk=98
Action.c(8): kkk=78
Action.c(8): kkk=55
Action.c(8): kkk=0
Action.c(8): kkk=81723452
Ending action Action.

(*p)++:  ++后缀,取指针p的值,然后这个值自增,后缀下次才生效

Starting action Action.
Action.c(8): kkk=100
Action.c(8): kkk=101
Action.c(8): kkk=102
Action.c(8): kkk=103
Action.c(8): kkk=104
Ending action Action.

++(*p): 取指针p的值,然后这个值自增,因为是前缀,立即生效

Starting action Action.
Action.c(8): kkk=101
Action.c(8): kkk=102
Action.c(8): kkk=103
Action.c(8): kkk=104
Action.c(8): kkk=105
Ending action Action.

++*p++: 结合上面的不难理解,取数组的值,指针移一位,取出来的这个值自增。  *和++优先级一样,从右往左运算

Starting action Action.
Action.c(8): kkk=101
Action.c(8): kkk=99
Action.c(8): kkk=79
Action.c(8): kkk=56
Action.c(8): kkk=1
Ending action Action.

二维数组的指针

Action()
{
int erwei[][] = {{,,},{,,}};
int (*p1)[] = erwei;
int i, j; for(i=; i<; i++)
{
for(j=; j<; j++) {
lr_output_message("*(*(p1+%d)+%d) =%d",i,j,*(*(p1+i)+j));
} }
return ;
}

Starting action Action.
Action.c(10): *(*(p1+0)+0) =2
Action.c(10): *(*(p1+0)+1) =3
Action.c(10): *(*(p1+0)+2) =4
Action.c(10): *(*(p1+1)+0) =5
Action.c(10): *(*(p1+1)+1) =6
Action.c(10): *(*(p1+1)+2) =7
Ending action Action.

int (*p1)[3]: 申明二维数组的指针,[3] 表示指针的长度,和二维数组的每组大小一致

*(p1+i):移动指针第一维度,即第几组

*(*(p1+i)+j):在指针的第一维度下,移动指针第二维度,即在那组里的第几个