【学习笔记】《Linux C语言指针与内存》

vi sample.c

以一个简单的数值交换为例,引入内存概念。

#include <stdio.h>

void change(int *a,int *b){
	int *temp = a;
	a = b;
	b = temp;
}

int main(void){
	int a,b;
	a=5;
	b=3;
	change(&a,&b);
	printf("a = %d ,b = %d\n",a,b);
	return 0;
}

编译

#安装gdb调试工具
sudo apt-get install gdb

#编译
gcc -g sample.c -o sample.out

#运行gdb
gdb sample.out

GDB调试工具常用命令


·
start :进入调试
break :断点
list :显示代码
回车键 :重复上一条命令
print <变量> :打印变量
next :下一行
step : 进入函数?
bt :堆栈状态
f :切换堆栈
quit :退出

内存结构图

其中高位内存是给系统内核用的,程序员只用到其下部分。

在这里插入图片描述

后续知识概要

绿色部分可自由分配malloc

编译后的代码在代码段

变量的内存顺序:按顺序

函数的内存顺序 :按逆序

静态变量,全局变量 都在数据段

数组:指针数组的内存本质

指针运算:p++,步长为数据类型的长度。p[n]

字符数组/指针字符串:

(gdb) x/6cb 0x7fffffffde03
#连续打印6个字节的字符
...
char str[] = "hello";
char *str2 = "world";
char str3[10];
scanf("%s",str);

//若此时输入为aaaaaaaaaaaaaaaaaa,
//超过6个字符的部分进入了str3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值