分享

自学C语言的最大难题是什么?

 wuday8 2019-11-04

c语言最大的难题是指针和内存,这是难倒众多新手的关键地方,指针本身其实不难,难的是在开发中指针的逻辑变化。

指针移动

代码片段

int * ip = NULL;

ip += 1; //这个时候ip指针移动了sizeof(int)个字节

void * vp = NULL;

vp += 1; //编译错误!

指针转换移动

代码片段

unsigned int i = 0;

unsigned char *p = (unsigned char *)&i;

*(p + 0) = 255;

*(p + 1) = 255;

*(p + 2) = 255;

*(p + 3) = 255;

指针指向内存边界

代码片段

int arr[] = {0};

*(arr + 1) = 1314;

arr++;

//两个地方有问题

堆栈内存问题

栈主要是用于逻辑计算、数据交换等,以及函数内定位的临时变量,这部分变量只会在当前作用域有效。堆内存通过malloc开辟,数据则是在一直存在,除非free和退出程序。注意栈溢出,不要把内存开销大的结构定义在栈上,因为栈的空间很小。

野指针

代码片段

int * i = (int *)malloc(sizeof(int));

free(i);

*i = 10;

野指针是致命问题,能够直接让程序崩溃。这只是一个简单的程序,当代码变得非常复杂的时候,容易出错的几率更大。

栈作用域问题

代码片段

char* getstr()

{

char str[] = "abc";

return str;

}

char * p = getstr();

全局区作用域

代码片段

char* getstr()

{

char * str = "abc";

return str;

}

char * p = getstr();

总结

c 和 c++固然难学,只要用心去学习和理解,终会学会的!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多