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

Linux C语言指针与内存

DavidChin
难度初级
时长 2小时 5分
  • 程序编译后存储在程序区 而程序执行到多少行,有哪些变量,这一切都记录在栈中
    查看全部
  • 对指针透彻,可以多看
    查看全部
  • lunix C
    查看全部
  • 最先分配的栈地址最大
    查看全部
  • 地址分配:代码,数据段是从下往上分配(先低地址,后高地址),栈是从上往下分配(先高地址,后低地址) 函数中静态变量,局部变量区别: 局部变量在栈(相对数据段而言的高地址)中,而静态变量在数据段(低地址)中. 所以在多次调用函数时,静态变量不会被重新,初始化. 或者这么说,静态变量的生存周期和数据段相同,局部变量生存时间受调用函数时,所属函数进栈出栈的影响而会重新初始化. 全局变量和静态变量都在数据段中,但静态变量是某个函数特有的.
    查看全部
  • 64位系统下,指针占8个字节,32位 4个字节。 栈、先声明的地址大,后声明的地址小,与代码段数据段相反。 编译器优化代码,把声明时不在一起的同一类型变量,放到一起(某种程度上修改了源码) 如 声明 int a ; float b ; int c; 编译后变量a的地址和c的地址是连在一起的. 64位寻址下,指针占用8字节空间. 编译器优化代码,把声明时不在一起的同一类型变量,放到一起(某种程度上修改了源码) 如 声明 int a ; float b ; int c; 编译后变量a的地址和c的地址是连在一起的.
    查看全部
  • 变量名只是代号<br> 变量的本质是内存 在标准的C语言中,不允许直接对内存地址进行操作,只能是对操作系统已经分配给的内存空间进行操作。(防止用户自己操作内存地址时侵吞系统内存或者其他程序的内存) p;指针指向的变量地址 *p;指针指向的变量值 &p;指针自己所在的地址 既然一个指针保存的是变量的地址,对32位CPU,地址有4个字节,就需要4个内存单元来存储,所以每次++p在内存里都是跳4格。
    查看全部
  • 1.C语言的特色在于指针和内存,正事由于C语言对指针和内存的精确调用,使得C语言具有很高的性能。 2.计算机的运行方式:计算机内部计算使用二进制,显示使用十进制,编程的时候使用十六进制。 3.32位操作系统最多使用4G内存,原始是因为CPU最多使用32个地址总线控制内存,而2的32次方就是4G. 4.操作系统会对所有内存进行编号,这些编号就是内存的地址。计算机通过操作系统控制程序的运行,计算机里面的全部内存,低编码位用来做当作各种应用程序运行所需要的内存,高编码位是计算机内核使用。用户内存从低到高依次是编码段,数据段,堆和栈,堆和栈之间还有一大部分是动态内存。以备不时之需。 5.用户内存隔离的好处在于把操作系统内核所需要的内存和应用程序内存分隔开,就不容易出现卡机或者死机的状态。 6.内存划分,除了低48位的内存都留给系统内核。绿色部分为自由可分配内存
    查看全部
    1 采集 收起 来源:内存管理

    2016-09-09

  • 一、指针与字符串 1、字符串表示形式 A、用字符数组实现 char string[] = “I love China!”; B、 用字符指针实现 char *string = “I love China!”; 2、字符指针变量与字符数组 char *cp; 与 char str[20]; a.str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址 b.char str[20]; str=“I love China!”; (错) char *cp; cp=“I love China!”; (对) c. str是地址常量;cp是地址变量 d.cp接受键入字符串时,必须先开辟存储空间 3、字符串与数组关系 a.字符串用一维字符数组存放 b.字符数组具有一维数组的所有特点 c.数组名是指向数组首地址的地址常量 d.数组元素的引用方法可用指针法和下标法 e.数组名作函数参数是地址传递等 区别 a.存储格式:字符串结束标志 b.赋值方式与初始化 c.输入输出方式:%s %c 例子: char str[]={“Hello!”}; (对) char str[]=“Hello!”; (对) char str[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; (对) char *cp=“Hello”; (对) int a[]={1,2,3,4,5}; (对) int *p={1,2,3,4,5}; (错) -------------------------------- char str[10],*cp; int a[10], *p; str=“Hello”; (错) cp=“Hello!”; (对) a={1,2,3,4,5}; (错) p={1,2,3,4,5}; (错) 4、字符指针变量使用注意事项 当字符指针指向字符串时,除了可以被赋值之外,与包含字符串的字符数组没有什么区别。
    查看全部
  • 4、元素为指针的数组____指针数组 当某个数组单元都是指针型数据时,这个数组被称为指针数组。其定义的一般格式为: 数据类型符 *变量名[常量表达式];
    查看全部
  • B.利用指针变量不仅可以引用一维数组,而且也可以引用多维数组。 (1)二维数组的行地址与列地址 如果将二维数组名a看成一个行地址(第0行的地址),则a+i代表二维数组a的第i行的地址,a[i]可看成一个列地址,即第i行第0列的地址。行地址a每次加1,表示指向下一行,而列地址a[i]每次加1,表示指向下一列。 例子: 对二维数组 int a[3][4],有: a-----二维数组的首地址,即第0行的首地址 a+i-----第i行的首地址 a[i]  *(a+i)------第i行第0列的元素地址 a[i]+j  *(a+i)+j -----第i行第j列的元素地址 *(a[i]+j)  *(*(a+i)+j)  a[i][j] (2)通过二维数组的行指针来访问二维数组 格式;数据类型符 (*指针变量名)[常量表达式];(二维数组第二维的大小)
    查看全部
  • 数组相当于指针常量。数组与指针有通用性,也有差异性
    查看全部
  • 3、指向多维数组的指针-数组指针 利用指针变量不仅可以引用一维数组,而且也可以引用多维数组。 A.利用一般指针变量对二维数组的引用。 #include <stdio.h> void main ( ) { short int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; short int i, j, *p; p = &a[0][0]; //p=a[0];也可以。因为a[0]是第一行的首地址。 for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf ("a[%d][%d] = %d ", i, j, *(p + i*3 + j)); printf ("\n"); } } 注意: 假设有一个m行n列的二维数组a: ①a[i](i在0到m-1之间)为第i+1行的首地址,是一个地址常量。如上例中的a[0]表示第一行的首地址,当然也是整个二维数组元素所占内存单元的首地址,a[1]表示第二行的首地址。 ②当二维数组的首地址赋给指针变量p以后,则访问某个元素a[i][j]可用以下几种方式来代替:*(p+i*n+j)、p[i*n+j]、*(a[0]+i*n+j)。 ③二维数组名a不可赋值给一般指针变量p,只能赋值给指向二维数组的指针变量。p = a;是非法的。 ④当指针p指向这个二维数组时,其实p就相当于一个一维数组,因此访问二维数组中的元素可分别用p[0]…p[5]或*(p+0)…*(p+5)来表示
    查看全部
  • 数组元素的应用: void main( ) { int a[5], *pa, i; for (i = 0; i < 5; i++) a[i]=i+1; pa = a; for (i = 0; i < 5; i++) printf ("*(pa+%d):%d\n", i, *(pa+i)); for (i = 0; i < 5; i++) printf ("*(a+%d):%d\n", i, *(a+i)); for (i = 0; i < 5; i++) printf ("pa[%d]:%d\n", i, pa[i]); for (i = 0; i < 5; i++) printf("a[%d]:%d\n", i, a[i]); } 1.赋值:pa=a; 2.指针中 p[i]=*(p+i);
    查看全部
  • 利用&取到地址,对指针赋值后,再用*取到内容进行赋值、比较、等操作
    查看全部

举报

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

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