ddfc和de00
ddfc:1101 1110 0000 0000
de00:1101 1101 1111 1100
差:1111 1100
对啊,视频说的就是b是dde0,他说的是b的下一个地址应该是de04
懂了。。16进制的这些只是内存地址的编号,而内存条最小存储单元的大小为1个字节,也就是说0xddfc这个地址编号对应的内存中能存储1个字节的数据.
内存条最小存储单元为1个字节,因此32位PC的寻址空间包含2^32个地址,每个地址对应1个字节的数据空间,那么32位PC的最大内存为2^32字节=4G
视频后面讲解了
一个大部分原因 就是 编译优化了 相同类型的 变量 被放到一起 可以提高效率
所以就这样了
&a是取a的地址,*a才表示a是指针
sudo apt-get install gcc
后来那个是pgloabal....
用16进制算一下,8,9,a,b,c,d,e,f,占8个字节
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(char*name[],int m)
{
char*t;
int i,j,k;
for(i=0;i<m-1 ;i++){
k=i;
for(j=i+1 ;j<m;j++){
if(strcmp(name[k],name[j])>0){
k=j;
}
if(k!=i){
t=name[i];
name[i]=name[k];
name[k]=t;
}
}
}
int main()
{
char*bname[]={"Programming inANSI C","BASIC","Visual C++ 6.0Programming","TURBO C 2.0"};
m=sizeof(bname)/sizeof(char*);
sort(bname,m);
putchar('\0');
for(i=0;i<m;i ++){
printf("%s\n",bname[i]);
}
printf("Hello world!\n");
return 0;
}
你就没有发现你粘上来的代码一堆BUG吗?
首先c++是向c语言嫁接了面向对象编程工具。c++是c的一个超集,意味着任何c程序都同时是,或者差不多是一个有效的c++程序。
简单的从概念上说没有区别:
1。C++语法中新增了“类”的概念,
2。c++可以理解为c的升级版本,c中的语法百分之九十九c++都能使用,反过来c不能使用c++的部分语法和关键字
希望能帮到你
一般把源代码编译完成为目标文件的代码就存在代码段;
调用的函数指针的顺序就存放在栈内存,可以理解为栈的先进后出就是函数的调用的顺序;
打印函数内部变量在代码段的存储位置:首先要用bt 显示你的栈内存顺序,再用f + 编号,进去你想打印变量所在的函数里面,再用p+ &变量名字,即可打印;
a定义的是变量,不是常量;a=3;只是给a赋予一个初始值。常量是用define声明的
我试也是递减的,a的地址位更高。
(gdb) p &a $18 = (int *) 0x7fffffffe428 (gdb) p &b $19 = (int *) 0x7fffffffe424
数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
32位系统占用4个字节, 也就是32个bit,64位系统占用64个bit,也就是8字节
声明一个函数的指针
*代表取值
&代表取地址
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
一个是变量,一个是指针