test1 main.c
#include<stdio.h>
int global=0;
int rect (int a,int b)
{
static int count=0;
count++;
global++;
int s=a*b;
return s;
}
int quadrate(int a)
{
static int count=0;
count++;
global++;
int s=rect(a,a);
return s;
}
int main()
{
int a=3;
int b=4;
int *pa=&a;
int *pb=&b;
int *pglobal=&global;
int (*pquadrate)(int a)=&quadrate;
int s=quadrate(a);
printf("%d\n",s);
test1调试
(gdb) list
13
14 int quadrate(int a)
15 {
16
17 static int count=0;
18 count++;
19 global++;
20 int s=rect(a,a);
21 return s;
22 }
(gdb) start
Temporary breakpoint 1 at 0x78f: file main.c, line 27.
Starting program: /home/yd/workplace/pointer/les2/a.out
Temporary breakpoint 1, main () at main.c:27
27 {
(gdb) n
29 int a=3;
(gdb)
30 int b=4;
(gdb)
31 int *pa=&a;
(gdb)
32 int *pb=&b;
(gdb)
33 int *pglobal=&global;
(gdb)
34 int (*pquadrate)(int a)=&quadrate;
(gdb)
37 int s=quadrate(a);
(gdb) s
quadrate (a=3) at main.c:18
18 count++;
(gdb) bt
#0 quadrate (a=3) at main.c:18
#1 0x00005555555547dc in main () at main.c:37
(gdb) n
19 global++;
(gdb)
20 int s=rect(a,a);
(gdb) p &s
$1 = (int *) 0x7fffffffddfc
(gdb) s
rect (a=3, b=3) at main.c:7
7 count++;
(gdb) n
8 global++;
(gdb)
9 int s=a*b;
(gdb) bt
#0 rect (a=3, b=3) at main.c:9
#1 0x000055555555477f in quadrate (a=3) at main.c:20
#2 0x00005555555547dc in main () at main.c:37
(gdb) p &s
$2 = (int *) 0x7fffffffddd4
(gdb) p &count
$3 = (int *) 0x555555755018 <count>
(gdb) f 1
#1 0x000055555555477f in quadrate (a=3) at main.c:20
20 int s=rect(a,a);
(gdb) p &count
$4 = (int *) 0x55555575501c <count>
(gdb) f 0
#0 rect (a=3, b=3) at main.c:9
9 int s=a*b;
(gdb) p &global
$5 = (int *) 0x555555755014 <global>
(gdb) f 1
#1 0x000055555555477f in quadrate (a=3) at main.c:20
20 int s=rect(a,a);
(gdb) p &global
$6 = (int *) 0x555555755014 <global>
(gdb)
test2 main2.c与调试:
(gdb) list
13
14 int quadrate(int a)
15 {
16
17 static int count=0;
18 count++;
19 global++;
20 int s=rect(a,a);
21 return s;
22 }
(gdb)
23
24
25 int main()
26
27 {
28
29 int a=3;
30 int b=4;
31 int *pa=&a;
32 int *pb=&b;
(gdb)
33 int *pglobal=&global;
34 int (*pquadrate)(int a)=&quadrate;
35
36
37 // int s=quadrate(a);
38 int s=(*pquadrate)(a);
39 printf("%d\n",s);
40
41 }
42
(gdb) start
Temporary breakpoint 1 at 0x78f: file main2.c, line 27.
Starting program: /home/yd/workplace/pointer/les2/a.out
Temporary breakpoint 1, main () at main2.c:27
27 {
(gdb) n
29 int a=3;
(gdb)
30 int b=4;
(gdb)
31 int *pa=&a;
(gdb)
32 int *pb=&b;
(gdb)
33 int *pglobal=&global;
(gdb)
34 int (*pquadrate)(int a)=&quadrate;
(gdb)
38 int s=(*pquadrate)(a);
(gdb) s
quadrate (a=3) at main2.c:18
18 count++;
(gdb) bt
#0 quadrate (a=3) at main2.c:18
#1 0x00005555555547dd in main () at main2.c:38
(gdb) p &a
$1 = (int *) 0x7fffffffddec
(gdb) p pquadrate
No symbol "pquadrate" in current context.
(gdb) f 1
#1 0x00005555555547dd in main () at main2.c:38
38 int s=(*pquadrate)(a);
(gdb) p quadrate
$2 = {int (int)} 0x555555554747 <quadrate>
(gdb) p *pquadrate
$3 = {int (int)} 0x555555554747 <quadrate>
(gdb) p pquadrate
$4 = (int (*)(int)) 0x555555554747 <quadrate>
(gdb) p pa
$5 = (int *) 0x7fffffffde1c
(gdb) p *pa
$6 = 3
(gdb) p *pb
$7 = 4
(gdb) p a
$8 = 3
(gdb) p b
$9 = 4
(gdb)