为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Linux C语言指针与内存_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言指针与内存

DavidChin
难度初级
时长 2小时 5分
  • 1、数组的指针 数组的指针其实就是数组在内存中的起始地址。而数组在内存中的起始地址就是数组变量名,也就是数组第一个元素在内存中的地址。 2、指向数组的指针变量 如果将数组的起始地址赋给某个指针变量,那么该指针变量就是指向数组的指针变量。 对数组元素赋值的几种方法; A.第一种方法 char str[10]; int k; for (k = 0; k < 10; k++) str[k] = 'A' + k; //也可写成*(str+k) = 'A' + k B.第二种方法 char str[10]; int k; char *p; p = str; //应用数组首地址进行赋值 for (k = 0; k < 10; k++) p[k] = 'A' + k; //也可写成*(p+k) = 'A' + k C.第三种方法 char str[10]; int k; char *p; p = str; for (k = 0; k < 10; k++) *p++ = 'A' + k; //相当于 *p = 'A' + k; p++; 注意:数组名是地址常量,切不可对其赋值,也不可做++或--运算。例如:int a[10];如果在程序中出现a++或a--则是错误的。
    查看全部
  • 指针变量的引用: into a; int *p = &a;// p指向a *p = 10; // 相当于 a = 10; (当p赋值上a的地址;*p的变化就和a是同步的) a++;(此时a、*p都变成11) 注意:程序在利用指针间接引用内存单元时,将按照指针变量定义时所指向的数据类型来解释引用的内存单元。 重点强调: 1.指针变量必须先定义,后赋值,最后才能使用!没有赋值的指针变量是没有任何意义的,也绝对是不允许使用的。 2.指针变量只能指向定义时所规定类型的变量。 3.指针变量也是变量,在内存中也要占用一定的内存单元,但所有类型的指针变量都占用同样大小的内存单元,其具体大小取决于所使用的编译环境,如在BC3.1和VC6.0下为4个字节,在TC2.0下为2个字节。
    查看全部
  • 1、变量值的存取方法 直接访问:按变量名来存取变量值 间接访问:通过存放变量地址的变量去访问变量 2、指针变量与其所指向的变量之间的关系 3、指针变量的定义 一般形式:[存储类型] 数据类型符 *变量名; 注意: int *p1, *p2; 与 int *p1, p2; 指针变量名是p1,p2 ,不是*p1,*p2 指针变量只能指向定义时所规定类型的变量 指针变量定义后,变量值不确定,应用前必须先赋值 4、指针变量的赋值 A.初始化赋值: [存储类型] 数据类型 *指针名 = 初始地址值; 例 int i; int *p = &i; 例 int i; int *p = &i; int *q = p; B.赋值语句赋值 例 int a; int *p; p = &a; 注意:一个指针变量只能指向同类型的变量如果给指针赋值时,=号右边的指针类型与左边的指针类型不同,则需要进行类型强制转换。
    查看全部
  • 1、内存地址──内存中存储单元的编号 注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。 2、变量地址──系统分配给变量的内存单元的起始地址 例如:一个int类型占4个字节,第一字节的地址即为变量地址。 3、指针与指针变量 指针:一个变量的地址 指针变量:专门存放变量地址的变量(可以称为地址变量)
    查看全部
  • 1.编译命令:gcc -g main.c -o main.out; 2.调试命令:gdb ./main.out; 3.调试器:(gdb)list:列出源代码; (gdb)break line-number:在指定行数打断点; (gdb)start:开启单步调试; (gdb)p a:打印a变量在内存中的情况; (gdb)n:执行到下一句; (gdb)s:进入函数内部; (gdb)bt:查看函数堆栈; (gdb)f 1:切换到编号为1的函数中; (gdb)q:退出调试;
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-12

  • 指针的定义形式为int/float/double *p(变量名为p,类型int/float/double *都是四个字节) 实参为地址 实际意义取到地址后对地址里的内容进行操作 赋值:int *p,a; a=2; p=&a;(p的值就是a的地址,p作为一个指针变量也有自己的地址) 这样利用取内容符*,可以得到*p==a;
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2018-03-22

  • gcc -v gdb -help cd ~/workspace/c ls cd pointer ls rm main.out // main.out不支持调试 ls gcc -g main.c -o mian.out //加了-g之后就是支持调试的 cp main.c main2.c vi main2.c 修改代码,将指针删除,并保存; gcc -g main2.c -o main2.out ls gdb ./main2.out l //列出当前代码 继续按l或直接回车继续显示剩下的代码 start//开始调试 p a//print打印a的值 n//继续下一行 p a p b n p a s//进入当前函数 bt//显示函数堆栈 f 1//跳转到序号是1的函数 main f 0//跳转到序号是0的函数 change q//退出调试
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-10

  • ddd
    查看全部
  • CPU用地址总线寻址,有多少地址总线,就有多少种状态,就能寻找和使用多大的内存 32bit CPU: 2^32 bit== 4GB 64bit CPU: 2^64 bit 内存分配 -------------------------------------------- 系统内核 ------------------------------------------- 栈(暂时存储首先执行的程序状态) ------------------------------------------ 自由可分配内存(可动态分配内存) ----------------------------------------- 堆 ---------------------------------------- 数据段(声明一些全局变量或者声明一些常量) ---------------------------------------- 代码段(程序源代码编译后存放在此)
    查看全部
    2 采集 收起 来源:内存管理

    2016-08-08

  • #include <stdio.h> void change(int *a, int *b) { int temp=*a; *a=*b; *b=temp; } int main() { int a=5; int b=3; change(&a,&b); printf("num a=%d\n num b=%d\n", a,b); return 0; } 如果是无返回值的函数调用,实参就要用到地址传递变量值给形参,形参要用指针接收实参变量,这样就可以有效输出了。
    查看全部
  • bt
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-07

  • gdb l gdb s gdb start
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-07

  • gdb /.out调试
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-07

  • cp main1.c main2.c复制
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-07

  • gcc -g 1.c -o 1.c
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-08-07

举报

0/150
提交
取消
课程须知
本课程是C语言中级课程,为了更好的学习效果: 1、需要有一定的C语言基础,如果没有基础的同学可以看《C语言入门》这门课。 2、本课程是在Linux环境下讲解,需要熟悉一些Linux命令。如果不了解的话可以在《Linux C语言编程基本原理与实践》这门课程中补充
老师告诉你能学到什么?
1、C语言中的指针是怎么回事 2、Linux下gdb调试工具是怎样使用的 3、指针与内存有着怎样的关系 4、数组与字符串之间的联系
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!