为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言指针与内存

难度初级
时长 2小时 5分
学习人数
综合评分9.60
263人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.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)通过二维数组的行指针来访问二维数组 格式;数据类型符 (*指针变量名)[常量表达式];(二维数组第二维的大小)
    查看全部
  • 数组相当于指针常量。数组与指针有通用性,也有差异性
    查看全部
  • 数组元素的应用: 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);
    查看全部
  • 利用&取到地址,对指针赋值后,再用*取到内容进行赋值、比较、等操作
    查看全部
  • 指针变量的引用: 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
    查看全部
  • #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

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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