指针与内存基础

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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值