-
一个函数可被多次调用
查看全部 -
传入时只是传入了a,b被赋的数值
查看全部 -
Array数组其实是一种指针常量,而p则是一种指针变量(数组和指针有一定的通用性,又有一定的差别,指针可以表达数组,而数组不可以表达指针);
p++:指针偏移,运行效率比数组高;
为什么p+4;*p=101 与p[4]=101等价???p[4]=101代表从初始位置(a的地址就始)以四个字节为一步,向前走4步,到达某个位置,然后对这个位置进行初始化赋值,即把101赋给这个地址所代表的内存空间。p[4]代表从初始位置(a的地址就始)以四个字节为一步,向前走4步,到达某个位置。*p=101,代表此时指针指向的地址(即走了四步后所在位置)并对这个地址所在的内存空间进行初始化,赋值为101。
数组名本质是一个数组开头的地址,可以把它赋值给指针变量
int array[n]
int *p=array;
2也是因为这样:它是一个固定的值(指针常量),不可以
array+=2;
指针可以;
p+=2;
查看全部 -
变量名只是代号,变量的本质是内存;
在标准的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本身的地址。
查看全部 -
gdb 是gcc自带的一种调试工具 ;
gdb -help查看gdb用法;
gcc -g +源代码文件-o +执行文件名(.out 类型) 生成可调试的执行文件;
gdb +./ 可调试执行文件名;
进入gdb调试后,l表示查看程序;回车表示继续上一命令;start表示调试,会自动在main函数第一行程序加断点;n表示执行新行;s(step)表示进入函数中,需执行到函数所在行;p+变量名表示打印变量数值,bt 查看堆栈;f 1:切换到堆栈中编号为1的函数中;q:退出调试;
change(int a,int b);实际过程中,只是传递给了a,b数值,作用范围仅在函数内部,故不起换值作用,而change(int *a,int *b )传递给了参数地址,对存储单元中的值进行替换,起实际作用。
查看全部 -
系统内存分配
查看全部
举报