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++固然难学,只要用心去学习和理解,终会学会的!
联系客服