`
lianxiangbus
  • 浏览: 527695 次
文章分类
社区版块
存档分类
最新评论

C语言乱弹

 
阅读更多

引子:

    好久没碰C了,感觉有点生疏了,不想扔下,于是乎写一篇日志回忆一下。欢迎大家转载,转载请注明出处。

1.

A>什么是指针

B>什么是数组

C>指针与数组有什么关系?

(最基本的几个概念,学C必须懂的 不懂得可以百度,google,也可以留言)

/************************************************************************************************************************************************************************/

内存管理

1.代码段:存放操作指令,readonly

2.数据段:存放已初始化的全局变量,也就是存放静态分配的变量和全局变量

3.BBS段:存放未初始化的全局变量,内存中BBS段全置0

4.堆(heap):存放程序中动态分配的内存

5栈:存放局部变量,但不包括static变量

(画个图 让大家更明白 哈哈 图画的真不错,看了的人可以想一下那个波浪代表什么意思,想知道的可以留言)

1.进程空间地址如何管理

2.进程地址如何映射到物理内存

3.物理内存如何被管理

虚拟内存管理技术

用户空间

内核空间

(内存管理还是要好好学,自己感觉操作系统没怎么学好,还要加深啊 )

/************************************************************************************************************************************************************************/

自定义strlen函数。(不用任何自定义变量)

int my_strlen(const char *str)

{

assert(str==NULL);

return ('/0'==str)? 0 , 1+my_strlen(++str);

}

//(C语言中有些很巧妙的方法,很好玩的,但是不推荐,在保证大家能读懂的情况下还是可以用的)

/************************************************************************************************************************************************************************/

int a[5];

当a作为右值时代表数组元素的首地址,而非数组的首地址

a <==>&a[0]

!!! a不能作为左值

&a+1偏移量为 sizeof(a)

&a代表数组a的首地址

指针与指针数组

int *p1[10];//指针数组

int (*p2)[]10;//数组指针 相当于 int (*)[10] p2;//匿名数组

[]优先级高于*

inta[5][5];

int (*p)[4];

p=a;

问: &p[4][2] - &a[4][2]的值为多少?

解释:a代表a[0]的首地址

void fun(char a[3][4]);

<====>

void fun(char (*p)[4]);

<====>

void fun(char p[][4]);

//因为a代表a[0]的首地址

void fun(char *p[4]);

<====>

void fun(char **p);

char a[3][4];<====> char (*p)[10];

char *a[5];<====>char**p;

(怎么说呢 数组与指针是很好玩的东东 其实数组和指针没啥关系 他们只是穿着很像的衣服而已 所以要分清他们还得从本质上去区分

很搞的 但是觉得弄懂了会很有成就感)

/************************************************************************************************************************************************************************/

内存对齐

(在结构体中要注意的,搞不好就会出个幺蛾子,很简单 不解释 不懂请举手)

/************************************************************************************************************************************************************************/

const

(1)定义const常量

(2)修饰函数参数、返回值、甚至函数体

(具体例子就不讲了 方法就是在*号那里画个竖线 )

/************************************************************************************************************************************************************************/

extern “C”

C不支持函数重载,C++支持重载。

C++函数名编译后变为像_foo_int_int //函数参数会加到函数名中

(C与C++是两门不同的语言 不要认为C++包含C 而应该是C++兼容C 并不是包含 他们是两门不同的语言 至少编译规则就不同)

/************************************************************************************************************************************************************************/

自定义strcpy函数

原型:

char *strcpy(char *strDest, const char* strSrc)

{

assert((strDest!=NULL)&&(strSrc!=Nll));

char *address = strDest;

while((*strDest++ = *strSrc++)!='\0')

NULL;

return address;

}

这是C++string类里面的类方法 有空多看看 库函数 基本都写的很经典

今天就到此结束 哈哈 洗洗睡觉吧

End with a new day !

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics