上一页 1 2 3 4 5 6 ··· 30 下一页

2019年10月16日

关于字符串的一点补充

摘要: 有时候可以见到这样的例子: char *color_name[] = { “black”, “blue”, … }; 我们知道字符串常量就是一个char数组,但是为什么数组可以用于给指针数组的元素赋值呢?这个操作的依据是什么呢? https://stackoverflow.com/questions/7690340/when-does-a-array-act-as-a-po... 阅读全文

posted @ 2019-10-16 14:32 freshair_cn 阅读(119) 评论(0) 推荐(0) 编辑

2019年10月15日

“二维数组”?

摘要: 首先说明C中是不存在所谓的“多维数组”的。 int array[a][b];声明的是一个有a个元素的数组,每个数组元素是一个含b个元素的数组。 上述声明正确的说法是,数组的数组。 如果给函数传递一个“数组的数组”,应这样声明: void func(int array[][b]); 或者干脆 void func(int array[a][b]); 实际上传递的是指针,指向数组的指针,即 void f... 阅读全文

posted @ 2019-10-15 16:44 freshair_cn 阅读(130) 评论(0) 推荐(0) 编辑

数组名与指向数组的指针

摘要: 数组名就是指向数组的指针吗?当然不是的。 数组名是“指向数组初始元素的指针”。 “指向数组的指针”应这样定义: int (*array_p)[3]; 如果有数组 int array[3]; ,那么 array_p = &array; 是没有问题的,因为类型相同。但是,如果 array_p = array; 是不可以的。”指向int的指针”与”指向int数组的指针”是不同的。 从地址角度看,两者指向... 阅读全文

posted @ 2019-10-15 16:10 freshair_cn 阅读(817) 评论(0) 推荐(0) 编辑

如何实现带可变长参数的函数

摘要: 关于如何实现带可变长参数的函数,先看这两篇文章。 https://www.ibm.com/developerworks/cn/linux/l-va/index.html 以及 https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/va-arg-va-copy-va-end-va-start?view=vs-2019 统称带... 阅读全文

posted @ 2019-10-15 11:28 freshair_cn 阅读(512) 评论(0) 推荐(0) 编辑

2019年10月14日

assert()的使用

摘要: assert()是定义在assert.h中的恶宏,其用法是 assert(条件表达式); 若条件为真,什么也不做;做条件为假,强制终止程序。 比如说在条件分支中,如果程序没有Bug,我们确定某个分支绝对不会被走到,可以这样写: … case .. : … default: assert(0); 如果程序没有Bug,肯定不会走到分支default;在这个分支里强行退出程序,这种方法是值得肯定... 阅读全文

posted @ 2019-10-14 15:41 freshair_cn 阅读(156) 评论(0) 推荐(0) 编辑

参数入栈的顺序以及栈/堆的生长顺序

摘要: 首先,栈的生长方向与操作系统无关,更多是由CPU决定的;其次,栈与堆的生长方向是刚好相反的。为什么栈与堆的生长方向会刚好相反?可参考链接的说法:https://www.quora.com/What-is-the-logical-explanation-for-stacks-typically-growing-downward-and-heaps-growing-upward?awc=15748_1... 阅读全文

posted @ 2019-10-14 14:43 freshair_cn 阅读(1211) 评论(0) 推荐(0) 编辑

指向函数的指针

摘要: 函数可以在表达式中被解读为“指向函数的指针”,函数名就是该指针。“指向函数的指针”本质上也是指针(地址),所以可以将它赋值给指针型变量。 那么“指向函数的指针的变量”如何声明呢? 比如有以下函数原型: int func(double d); 保存指向该函数的指针的变量的声明如下: int (*func_p)(double); 其中func_p是指针变量。 通过func_p调用func大体上是这样子... 阅读全文

posted @ 2019-10-14 11:00 freshair_cn 阅读(1008) 评论(0) 推荐(0) 编辑

各变量入栈顺序

摘要: 用个简单的测试顺序即可测得,地址从低到高,个变量的入栈顺序为: “静态变量”框的部分,各变量入栈的顺序是(从低地址到高地址):函数内static变量->文件内static变量->全局变量。 阅读全文

posted @ 2019-10-14 10:19 freshair_cn 阅读(389) 评论(0) 推荐(0) 编辑

2019年10月11日

数组与指针

摘要: 有这样一种说法:“在C中,如果数组名后不加[],只单独写数组名,那么该名称表示指向数组初始元素的指针”。 这种说法的信息量是负的。 在语法上,数组和[]是没有关系的。 事实上,在最开始的时候,p[i]只是*(p + i)的简便写法;下标运算符[]原本只有这种用法,它和数组是没有关系的。 也就是说,数组声明中的[]和数组元素表达式中的[]意义是完全不同的。 事实上,由于a + b与b + a的意义没... 阅读全文

posted @ 2019-10-11 16:28 freshair_cn 阅读(118) 评论(0) 推荐(0) 编辑

C中空指针、NULL与0

摘要: 空指针是指确保可以没有指向任何一个对象的指针。空指针常量值通常使用宏定义NULL来表示。 空指针和任何非空指针比较都不相等,因此经常作为函数异常时的返回值使用。 链表也经常在数据末尾放一个空指针提示后续没有数据。 那么NULL是什么呢? 通常情况下,NULL就是0. 例如有些代码里会把NULL宏定义成这样: #define NULL 0 但是0与NULL不是完全等价的。 例如字符串使用’\0’结束... 阅读全文

posted @ 2019-10-11 15:15 freshair_cn 阅读(948) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 ··· 30 下一页

导航