
比如 char p=“BASIC”;
内存中会被会分配一段连续空间存放 'B','A','S','I','C','\0' 这6个数据,读取时以 ‘\0' 作为结束。
strcmp函数是逐个比较字符串中每个字符的ASCII码值,若前者比后者大返回值为正,反之为负,相等则为0
int p;已经告诉编译器,这个指针是指向int类型数据的指针。
malloc取得的指针是不指定类型的,需要强制转换成赋值号左边指针类型才可以不报错地赋值。即malloc返回值是个地址,当作int 来用,无论malloc是否申请了足够一个int占用的字节数。
记住32位下的指针 都是4个字节可以简单的这么理解:一个基本的数据类型(包括结构体等自定义类型)加上“”号就构成了一个指针类型的模子。这个模子的大小是一定的,与“”号前面的数据类型无关。“”号前面的数据类型只是说明指针所指向的内存里存储的数据类型。所以,在 32位系统下,不管什么样的指针类型,其大小都为 4byte。虽然你定义了结构体,但是不会为结构体的定义分配内存的,分配内存的是结构体的对象,或者说实例,因此,你能知道的是如果申明使用这个结构体会分配多少内存,只需要声明一个对象,然后再查看这个对象的大小就能打到你的目的了:siziof(struct xx), xx就是你定义的结构体的一个对象对于这个你只要记住一句秘诀就好,指针的大小仅仅取决指针本身的大小,不取决于指针指向的大小。 还有就是还有一个虚拟内存和物理地址的关系,有MMU映射,8086里有硬件完成一个地址偏移的过程,物理地址 = 基址16 + 变址。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)