-
int *p=&a:定义的指针p是整型数据,p++之后,p中的地址就会增加4个字节。
这就是指针偏移运算,这种方式比CPU直接取地址效率还要高,所以设计程序都会尽可能地采取这种方式。
p+=3:将指针向下移动3格,如果p是整型,就移动12个字节。(等价于p[3])
数组和指针的本质都是地址,所以*pa=array,相当于将array数组的地址赋值给pa指针,这样pa[1]的功能和array[1]的功能就没有区别了。
数组是指针常量,指针是指针变量,数组的指向对象是固定不变的,指针变量的指向对象会改变,所以这两种指针还是有所差别的,指针能实现数组的功能,但是数组不一定能实现指针的功能。
查看全部 -
在函数名前加上星号,也可以调用函数,一般用作回调函数使用。(第31行)
查看全部 -
全局变量储存在数据段,先申明的地址小,后申明的地址大,调用的函数里的局部变量存放在栈中。
int整型占用4个字节,变量的内存地址只显示第一个字节。
编译后的程序,有可能不会将变量按照编写代码的顺序存入内存,因为gcc编译时会对代码进行优化,它会将同类型的变量在内存中放到一起。
查看全部 -
调用的哪个函数,运行到函数的哪一行,变量的相关数据都被记录保存到栈当中了。
p &x:表示查看x变量所在的地址。
变量的本质是地址,是内存空间。
标准的编程语言不允许直接对内存地址进行操作,操作系统不允许。
指针也是一个变量类型,保存内存地址。
查看全部 -
0x7fffffffffffffff以下的内存由用户操作,上面的内存地址由操作系统自己调用。
代码段放编译后的程序,数据段放常量、变量,中间的绿色是自由可分配空间。
查看全部 -
一般用gcc指令编译过的程序不能被用于gdb(一个Linux自带的调试工具)调试,要用gcc -g xxx.c指令才可以。
用gdb调试要保存.c的源代码,否则会有一些调试功能无法使用(比如调试时无法显示行号)。
gdb ./xxx.out:表示调试xxx文件
在调试模式下(括号中含有gdb),输入l(或者list)显示整个源代码,输入break打断点,输入start开始调试(此时会显示断点在哪里),p x表示输出x这个变量的值,n继续下一步执行,当断点打到调用的函数前可以用s指令来进入函数内部,bt查看函数堆栈(可以显示当前函数调用的堆栈情况), f n代表转到相应的标号n堆栈进行函数的调用。
本次练习案例中,change函数的a和b是形参,他们值的改变,不能代表main函数里的实参也改变了。
按q退出调试
查看全部 -
*a代表指针,&a代表取地址
查看全部 -
晚安查看全部
-
1
查看全部 -
内存地址采用十六进制数表示,十六进制数都是以0x开头,十六进制数的每一位可以表示四个二进制数,因此对于一个32位系统,其所有的内存空间地址可以被八位十六进制数表示。 每个十六进制的内存地址都指向一个字节的内存空间,因此32位的系统总共可以配置2^10*2^10*2^10*2^2=4GB的内存; 对于64位操作系统,只有前48位编码的地址用于程序存储,后十六位为系统内核保留使用的地址编码段; 内存地址从低到高依次编码存储代码段(函数体指令等)、数据段(常量和全局变量)、堆、自由空间、栈。查看全部
-
内存查看全部
-
什么?查看全部
-
你好啊查看全部
-
你好查看全部
-
如果想用GDB gcc -g *.c -o *.out查看全部
举报