版本:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
安装gdb工具:apt-get install gdb
练习:设函数void change(int,int)将交换两形参数值,如有两整型变量int a=10;int b=15,则执行change(a,b);之后,a,b值分别为( )
*******
answer:10 15
解析:只是传值,只是change的局部变量,是实参的备份。
解决:加个指针,取地址符,实现交换功能。
安装gdb工具:apt-get install gdb
练习:设函数void change(int,int)将交换两形参数值,如有两整型变量int a=10;int b=15,则执行change(a,b);之后,a,b值分别为( )
*******
answer:10 15
解析:只是传值,只是change的局部变量,是实参的备份。
解决:加个指针,取地址符,实现交换功能。
2016-09-19
64位系统下,指针占8个字节,32位 4个字节。
栈、先声明的地址大,后声明的地址小,与代码段数据段相反。
编译器优化代码,把声明时不在一起的同一类型变量,放到一起(某种程度上修改了源码)
如 声明 int a ; float b ; int c; 编译后变量a的地址和c的地址是连在一起的.
栈、先声明的地址大,后声明的地址小,与代码段数据段相反。
编译器优化代码,把声明时不在一起的同一类型变量,放到一起(某种程度上修改了源码)
如 声明 int a ; float b ; int c; 编译后变量a的地址和c的地址是连在一起的.
2016-09-17
x/8x 0x7fffffffe19c
0x7fffffffe19c: 0x00000003 0x00ff0000 0x00000002 0xffffe19c
0x7fffffffe1ac: 0x00007fff 0x00000001 0x0000000a 0x00000064
说明:依次分别是:a, i, b, p, array[0], array[2], array[2]
一共7个变量,占了32个字节,其中除了p是地址值,占8字节外,其他都为int型,占4字节。之所以打印结果会这样,p也就是&a被分成了两个int,0x00007fff(+)ffffe19c-->0x7fffffffe19c
0x7fffffffe19c: 0x00000003 0x00ff0000 0x00000002 0xffffe19c
0x7fffffffe1ac: 0x00007fff 0x00000001 0x0000000a 0x00000064
说明:依次分别是:a, i, b, p, array[0], array[2], array[2]
一共7个变量,占了32个字节,其中除了p是地址值,占8字节外,其他都为int型,占4字节。之所以打印结果会这样,p也就是&a被分成了两个int,0x00007fff(+)ffffe19c-->0x7fffffffe19c
2016-09-16
已采纳回答 / JustWannaHugU
同学你好,前两天我回答了类似的问题,你可以参考参考书籍的话首推《C primer plus》第五版、六版都行,非常详尽、基础、深入;视频的话推荐浙江大学翁恺老师的在线课程:C语言入门与进阶传送门:http://mooc.study.163.com/course/YOOKCS0002-1000002011#/info要讲究方法:书和视频敲代码相辅相成,不能抱着大部头日夜不停地读,也不可一味的看视频最后、望采纳!
2016-09-14