学习C语言,可以接触到计算机的底层原理,在学习的时候碰到一个让我耳目一新的东西,“交换内存”,真是学海无涯。我先贴一下代码:
#include <iostream> using namespace std; void SwapMemory(void * m1,void * m2, int size) { // 在此处补充你的代码 char *c1=(char*)m1; char *c2=(char*)m2; for(int i=0;i<size;i++){ char t=c1[i]; c1[i]=c2[i]; c2[i]=t; } } void PrintIntArray(int * a,int n) { for(int i = 0;i < n; ++i) cout << a[i] << ","; cout << endl; } int main() { int a[5] = {1,2,3,4,5}; int b[5] = {10,20,30,40,50}; SwapMemory(a,b,5 * sizeof(int)); PrintIntArray(a,5); PrintIntArray(b,5); char s1[] = "12345"; char s2[] = "abcde"; SwapMemory(s1,s2,5); cout << s1 << endl; cout << s2 << endl; return 0; }
这是慕课上的一个小练习,难度不高,但是刷新了我对内存的认识。
内存的基本单位是字节,所以内存的操作都是以字节为单位进行寻址和操作。C语言中的char类型的大小刚好是一个字节,所以可以借助char,在字节的层面上来操作内存。这种操作可以使移动,复制,交换,初始化等。内存的少不了内存地址,因为每个字节都有一个唯一一个地址,所以就会用到指针。