简介 目录 评价 推荐
  • 慕哥5054345 2023-10-27
    将str指针往下移了三个,将hello中第二个l替换为\0,将字符串提前结束
    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    int *p=&a:定义的指针p是整型数据,p++之后,p中的地址就会增加4个字节。

    这就是指针偏移运算,这种方式比CPU直接取地址效率还要高,所以设计程序都会尽可能地采取这种方式。

    p+=3:将指针向下移动3格,如果p是整型,就移动12个字节。(等价于p[3])

    数组和指针的本质都是地址,所以*pa=array,相当于将array数组的地址赋值给pa指针,这样pa[1]的功能和array[1]的功能就没有区别了。

    数组是指针常量,
    指针是指针变量,
    指针能实现数组的功能,但是数组不一定能实现指针的功能。
    arry+=2会报错
    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    gdb命令:

    x/3d  地址:按照十进制d,连续显示3个(3)变量的地址(x),默认间隔为4个空格
    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    “p”是一个地址,则“*p”是到这个地址去取里面的值,“(*p)”表示为一个整体,“(*p)(数据)”若p为代码段,则调用这个函数,传参数"数据"进去

    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    最下面的内存最先分配

    最先分配的栈地址反而更大

    栈的特点:先进后出

    静态变量不在栈里头,相同变量名称的静态变量分别在两个函数里便为两个不同变量,属于每个函数特有的;

    全局变量为所有函数公用的。其地址不变。

    一个函数被多次调用时,静态变量指向的还是数据段一个固定的地址;即不同函数的count是不同的count,但同一个函数不管调用多少次count,它指向的都是数据段的某个地址。
    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    无&符,输出变量值
    有该符,输出地址
    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    变量名只是代号,变量的本质是内存;
    在标准的C语言中,不允许直接对内存地址进行操作,只能是对操作系统已经分配给的内存空间进行操作。

    int *p=&a;    p 指针指向的变量地址; *p  指针指向的变量值; &p 指针自己所在的地址。既然一个指针保存的是变量的地址,对32位CPU,地址有4个字节,就需要4个内存单元来存储,所以每次++p在内存里都是跳4格。

    函数调用信息保存在栈(stack)中。 int *pa=&a指将a的地址传给pa。因此p pa看到的是a的地址(&a)。 而p &pa才能看到pa本身的地址。
    0赞 · 0采集
  • 慕哥5054345 2023-10-27


    代码段放编译后的程序,数据段放常量、变量,中间的绿色是自由可分配空间。
    0赞 · 0采集
  • 慕哥5054345 2023-10-27
    0x表示十六进制
    0赞 · 0采集
  • 慕哥5054345 2023-10-26
    加了地址符后的a表示一个地址,*a是去找到该地址下对应的值可以看出0中a为地址,需*a找到对应值
    1中a为确切值
    0赞 · 0采集
  • 慕哥5054345 2023-10-26
    gdb   -help完整显示各种用法(gdb)start  开始执行
    红框为自动设置的断点为12行处(gdb) p a
    分别为printf a   即为输出变量a
    (gdb)  n
    为换到下一行
    (gdb)  bt   查看函数堆栈
    堆栈像书,摞在上面先执行(gdb) f 1
    f为切换栈,即切换到栈1
    单用change,由于形参,两个函数中a.b不同,无法改变--所以需要指针
    0赞 · 0采集
  • 慕哥5054345 2023-10-26
    *a   表指针
    &a  取地址
    0赞 · 0采集
  • cqnuhy 2022-06-15
    注意:这里偏移三格指向arrary[0]是因为中间有一个变量i,然后是b,然后才是array[0],而不是array[1]
    0赞 · 0采集
  • cqnuhy 2022-06-15
    指针变量上加*表示:打印其保存的地址指向的值
    0赞 · 0采集
  • cqnuhy 2022-06-15
    不带&符号:打印变量里面的值
    否则:打印变量的地址
    0赞 · 0采集
  • 慕娘7394958 2022-02-10
    • 1.int array[5];

      arrray += 2;        //错误, array是常量指针(int const *array),不能被修改.

    0赞 · 0采集
  • 慕娘7394958 2022-02-09
    • C程序中的各个变量的地址与编译后的二进制程序中变量的地址并没有一一按照顺序存储,原因是编译器对程序进行了一定的优化,调整了变量在栈中的存储顺序。

    0赞 · 0采集
  • 慕仔3236778 2021-11-18

    栈的特点:先进后出

    0赞 · 0采集
  • 慕仔3236778 2021-11-18

    32bit:4个字节

    64bit:8个字节

    0赞 · 0采集
  • 慕仔3236778 2021-11-18

    表示位置

    0赞 · 0采集
  • 慕仔3236778 2021-11-18
    1. 变量只是一个代号,它的本质是内存。

    2. 指针保存的是内存地址。

    0赞 · 0采集
  • 慕仔3236778 2021-11-18
    1. 地址总线有多少位,寻址空间就有多少位。地址总线可以存在多种状态:32根地址总线就有2的32次方个状态。

    2. 比如:32位指的是给内存编号只能编到32个二进制位。

    0赞 · 0采集
  • 慕仔3236778 2021-11-18

    十六进制:

    二进制:满二进一

    0赞 · 0采集
  • 慕仔3236778 2021-11-18

    堆内存:是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。

    栈内存:每一块保留一块堆内存地址,存取速度比堆快,仅次于寄存器,栈数据可以共享,但缺乏灵活性。

    内存地址

    指针变量的实质:是一个概念也是一个变量,整形指针、字符指针、浮点指针是指针的具体浮现,常量由编译器决定。

    指针不是地址,是地址加偏移量。

    0赞 · 0采集
  • 慕仔3236778 2021-11-18

     int* a;这里的a就是代表指针变量(int*),而不是一个整型变量(int)所以a存放的是地址,*a才是地址中存放的值(这里的*与第一行的*不同,这个*是取地址的意思)

    0赞 · 0采集
  • CornTaro 2021-11-08

    用于调试的编译问件:gcc -g 文件名.c -o 文件名.out

    调试文件:gdb 文件名.out进入调试状态,

            列出当前项目软件源代码:l/list,若显示不完整,直接回车键即可继续显示              

            设置断点:break 行数              

            单步调试:start              

            查看变量的值: p/print 变量名              

            进行下一步:n

            进入某一步中查看,在进行到该步时,:s/step 

            查看函数堆栈:bt              

            查看函数堆栈是,查看某一堆栈:f 堆栈行

            回车:重复执行上个步骤

    0赞 · 0采集
  • weixin_慕设计9268437 2021-10-25

    指针,本质是一个地址
    代表指针的数据本身也有一个地址,但这个没用
    给指针赋值的时候,给的是被赋值量的地址

    0赞 · 0采集
  • 上善若水_ 2021-08-09
    一个指针是一个地址,32位是32/8=4字节,
    64位是64/8=8字节。
    0赞 · 0采集
  • 慕的地3511760 2021-07-19

    str[3]是字符串第四个字母l,将其改为\0就将字符串结束了。

    str在内存存放结束后就是str3开始存放。

    str只有6位空间,输入超过六位之后,编译器会将多余的输入从str的地址开始,一直向内存中输入。

    c语言的字符串数组,本质是字节数组,存放了很多字节。

    1赞 · 0采集
  • 慕的地3511760 2021-07-19

    str3[]是字符数组,所以str3可以直接作为地址,在scanf语句当中就不用&str3的表达方式了。

    "hello"这个字符串有5个字符,字符串结尾还有一个\0,所以一共有6个。

    x/6cb:表示向下打印6个字符,用比特为单位。

    用scanf输入str2,对其进行改动,不能完成值的更改,因为指针的内容在运行过后,会储存在代码段,无法被更改。

    0赞 · 1采集
数据加载中...
开始学习 免费