C 语言 非常道 第四章

   一个变量就是存储器里的一个存储区;存储器包括内存和处理器内部的寄存器,如果变量不在寄存器内,那么变量需要一个地址,处理器通过地址访问变量。
   程序的调试:
   **gcc  1.c  -o 1.exe  -g
   gdb  1.exe  -silent**

list 显示所编写的程序
break :断点
可以用内存地址的形式设置断点:b * 0x40155d
也可以用源代码行的形式设置断点: b 5
run : 运行程序 ,断点处停止
**print:**打印变量的值   print {n,m} 用花括号的形式一次打印多个值
next : 运行接下来的代码
continuing
quit

ptype: 返回表达式类型的信息
int *p; printf(" %p , %p",p,*p);
segmentation fault 分段错误 :分段错误是由于访问“不属于你”的内存引起的一种特定types的错误
在这里插入图片描述
用一个整数来初始化指针类型的变量或者给指针类型的变量赋值通常是不可行的,整型常量0,不需要任何显示的转换
signed char *ps1 = 0, * ps2;
ps2 = 0;
值为零的整型常量表达式可以自动转换为任何类型的指针转换后的结果称为那种类型的空指针,,空指针意味着它不指向任何有效的变量或函数。
在这里插入图片描述
在这里插入图片描述
基于上面这个程序:
px的类型是void ( * ) ( void ), px的值实际上指向函数 max
但是不能 这样调用 px ( 1,2 );
只能这样调用 px ( 1,2 );

但这样调用与函数max的声明不一致,按照规定,如果一个指向函数的指针同它实际指向的函数类型不一致,则用这个指针做函数调用时,程序的行为是未定义的

相似的,如果将一个指向某种变量类型的指针转化为指向另一种变量类型的指针,用转化后的指针访问变量时,也会出现各种各样的问题:
char x = 0;
++ * ( int * ) &x;
问题在于,&x 是char类型的指针,只占用一个字节的存储空间,但第二行中,递增的是指针变量为 int 类型的存储值,占用四个字节的存储空间,有三个字节的存储空间都不属于这个变量,访问时就会侵犯其他变量的存储空间,显然是不被允许的,这就导致可能程序在运行阶段崩溃。
书 p104 中间一段对其的概念,重要

书 5.2 课后题
怎样显示转义序列的编码
在这里插入图片描述
步骤:1. 执行开始的两条命令
生成可执行文件,进入调试
2. 显示程序中的内容确定行数
3. 在想要调试的行数设置断点
4. 运行
5. 使用 p /x siz命令打印编码

这个思路应该差不多,但是最终打印出的结果是错误的,暂时不知到为什么,后续再想

P134

书中练习5.5
在这里插入图片描述
在这里插入图片描述
中间出现 No Symbol 原因是只是设置了断点但是没有运行

具体的步骤上述做了说明

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值