![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言不简单的小知识点
hust_sheng
这个作者很懒,什么都没留下…
展开
-
C语言 二维数组下标为变量的初始化方法
例如:构建一个maxrownum*maxrownum的矩阵 long double **data1_bfE; data1_bfE=(longdouble **)malloc(maxrownum*sizeof(longdouble *)); for(i=0;imaxrownum;i++) { data1_原创 2015-04-16 16:36:12 · 4473 阅读 · 0 评论 -
sizeof求结构体大小的问题
sizeof求解结构体大小的问题标签(空格分隔):c/c++具体见:http://www.cnblogs.com/0201zcr/p/4789332.html?utm_source=tuicool&utm_medium=referralsizeof求解结构体大小的问题 如何给结构体变量分配空间由编译器决定,下面的情况针对的是Linux下的GCC。在Windows下的VC平台也是这样,至于其他平台转载 2016-03-09 10:37:13 · 6196 阅读 · 2 评论 -
关于函数返回字符串常量的问题
关于函数返回字符串常量的问题标签(空格分隔):c/c++首先看下面的代码// 此处省略头文件预处理语句using namespace std;const string& Func() // &去掉{ return "123";}int main(){ string s = Func(); cout << s << endl; return 0;}在g++编译下原创 2016-03-21 22:15:57 · 3600 阅读 · 1 评论 -
被const修饰的函数
被const修饰的函数标签(空格分隔):c/c++部分参考:http://www.tuicool.com/articles/Nz6N3e用const修饰函数的参数如果输入参数采用 指针传递 ,那么加 const 修饰可以防止意外地改动该指针,起到保护作用。 例如 StringCopy 函数:void StringCopy(char *destination, const char *source原创 2016-03-12 10:04:33 · 860 阅读 · 0 评论 -
符号优先级的坑
记一个符号优先级带来的坑标签:c/c++结论:当一个人sb的时候,全世界都会为你助攻啊!符号优先级表最容易被忽略,但是一旦有坑,都不是一时半会能发现的!下面是一行关于将二维变一维的代码( (img->width + 2 * IMG_SUBPIXEL_PAD_SIZE) * 4 表示第二维宽度大小)[原始]Pic[y][x & 3] [错误的修改] Pic[(y)*((img->width +原创 2016-04-06 15:27:55 · 687 阅读 · 0 评论 -
C语言宏接收函数及其参数
C语言宏接收函数及其参数标签:c/c++#include <stdio.h>#include <stdlib.h>#define call_optimized(function, arguments) {\ printf("\n-------------"); \ printf("\n\tCALL %s\n", #function); \ function argument原创 2016-04-08 10:03:34 · 3422 阅读 · 0 评论 -
C/C++中的重复定义bug
C中的全局变量的使用标签(空格分隔):c/c++使用不当很容易出现重定义的bug可以重复声明,不可以重复定义 在.h头文件中,变量如果没有初始化就是声明;初始化了就是定义。所以很多代码里面,都把变量的声明放在.h文件中当作全局变量使用,这是可以的,但如果这样使用的话是不能进行初始化的。一旦对.h中声明的变量进行了初始化也就相当于进行了定义,就可能出现重复定义的bug。或许可行的解决方案#i原创 2016-03-07 21:20:07 · 10126 阅读 · 2 评论 -
typedef引起的bug
typedef你用错了么?标签(空格分隔):c/c++先看一段正常的代码[test1.cpp]#include "test.h"int main(){ char s[4] = "asd"; const char *ctr = s; ctr = "ksd"; return 0;} const表示我们不能通过ctr改变s数组的值(提个醒,数组都是底层const,不过原创 2016-03-11 22:07:45 · 514 阅读 · 0 评论 -
Solution(VS)下多工程之间共享全局变量失效问题
Solution(VS)下多工程之间共享全局变量失效问题标签(空格分隔):c/c++ vsSolution解决方案的意思,可以看做是多个关联项目的链接器。解决方案把多个相关联的项目通过sln文件关联起来,记录项目地址方便开发者。一个解决方案可以有多个项目(project),项目可以单独生成,此时解决方案并不会更新,需要你重新生成来挂上新的项目的链接。问题描述Solution(解决方案)ut原创 2016-10-16 11:06:14 · 1435 阅读 · 0 评论 -
调用动态库导致符号无法解析错误
error:符号无法解析标签(空格分隔):vs c/c++符号无法解析的常见原因头文件包含出错,导致链接过程找不到源文件lib或dll引入失败(静态库或动态库配置问题)调用动态库的情况下,跨工程引入头文件导致的符号解析错误对第三种情况进行详细说明 较为大型的项目常常会设置较多个工程,以其中一个工程为主工程(包含main函数),且该主工程通过调用其他子工程的静态库或动态库中的相关函数完成处理原创 2016-10-16 10:20:41 · 4316 阅读 · 0 评论 -
sizeof运算符详细总结
sizeof运算符的系统总结标签:c/c++转自 http://blog.csdn.net/w57w57w57/article/details/6626840简介 sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或者数据对象)的长度(即占用内存的大小,以byte为单位)。其中类型包含基本数据类型(不包括void)、用户自定义类型(结构体、类)、函数类型。数据对原创 2016-01-18 16:36:18 · 58572 阅读 · 14 评论 -
二维数组和一维数组的数据分布和存取
二维数组和一维数组的数据分布和存取标签:c/c++二维数组在存储分布上和一维数组是一样的,但是存取的写法却是有很大差异的#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ int i, j; char mark[64][64] = {0}; char a = 1; for (i原创 2016-03-20 19:27:16 · 2678 阅读 · 1 评论 -
#define和const之间的对比分析
#define和const之间的对比分析标签(空格分隔):c/c++define部分: 宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议。)宏的语法为: #define 宏名称 宏值 注意,宏定义不是C或C++严格意义上的语句,所以其行末不用加分号结束。 作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母原创 2016-03-07 21:21:51 · 720 阅读 · 0 评论 -
main函数执行前后 《程序员的自我修养》·笔记
【前言】main函数执行前后的宏观过程(C++)linux系统下压板程序的入口是”_start”,这个函数是linux系统库(Glibc)的一部分,当我们的程序和Glibc链接在一起形成最终的可执行文件的之后,这个函数就是程序执行初始化的入口函数。程序初始化部分完成一系列初始化过程之后,会调用main函数来执行程序的主体。在main函数执行完成以后,再返回到初始化部分,进行一些清理工作,然后结束原创 2015-08-24 13:08:18 · 1341 阅读 · 1 评论 -
动态规划简介
动态规划动态规划 是一个多阶段决策过程:关于动态规划的几个概念 决策:在一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择称为决策。也就是在两个阶段间选择发展途径的行为。 决策变量:描述决策的变量称决策变量,用一个数或一组数表示。不同的决策对应着不同的数值。 决策序列:事件的发展过程之中需要经历n个阶段,需要做n次“决策”,这些“决策”就构成了事件整个发展过程的一个决策序列原创 2015-09-06 17:06:06 · 2517 阅读 · 0 评论 -
递归简介
关于递归递归算法的设计思路Recursive_SOLVE (P) //P是当前问题if P的规模足够小 then 直接求解else 将P转换为规模较小问题P' Recursive_SOLVE(P') //递归调用 将P'还原成为原问题P,结果合并endifEND Recursive_SOLVE递归的低效率 递归调用实际上是函数自己在调用自己,而函数的调原创 2015-09-05 13:41:40 · 538 阅读 · 0 评论 -
贪心算法简介
贪心算法、贪心算法的基本要素 通过学习前面的实例,已经体会到,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。 当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。而在一些情况下,即使贪心算法不能得到整体最原创 2015-09-05 22:26:54 · 3922 阅读 · 0 评论 -
全局变量初始化相关的一个错误
全局变量初始化相关的一个错误标签(空格分隔):Coding-Nissan全局变量初始化全局变量 在C++中对于以下语句:// 全局域int i = 3;int j = i; 因为是全局变量,编译时会将i放入.data段,并设置其值为3.而对于j,编译器遇到这种非常量的全局变量初始化语句,只知道j=i,由于i是变量,不是常量,编译器无法在编译时直接得到它的值,即编译器不能够直接用3来初始化原创 2015-11-21 14:23:01 · 1077 阅读 · 0 评论 -
c/c++ 文件操作相关的常用函数
文件操作相关的常用函数标签:c/c++删除文件 DeleteFileBOOL DeleteFile( LPCTSTR lpFileName // 文件名指针);功能说明 删除一个存在的文件返回值如果成功返回一个非0值失败返回0,可以用GetLastError函数得到错误信息 如果程序尝试删除一个不存在的文件。GetLastError返回ERROR_FILE_NOT_FOUN原创 2016-01-17 14:39:03 · 772 阅读 · 0 评论 -
字符串数组和字符串指针
先看一个例子:char *getStr(){ char str[] = "hello world"; // 生成在栈空间的局部变量 return str;} 不能这样,因为char str[] = "hello world";定义了一个局部字符数组,保存在栈中,尽管是数组,但它是一个局部变量,返回它的地址肯定是一个已经释放了的空间的地址。 解决方法:str[]改成*s原创 2015-09-08 11:54:22 · 682 阅读 · 0 评论 -
关于类型转换、溢出、移位等操作的小总结
类型转换、溢出、移位等操作标签:c/c++类型转换运算符两边操作数的类型转化 此时,操作数类型的转换规则如下:图中的横向箭头:针对运算符两边是同类型的数据(不同级别的类型当然也适用!) 表示必须的转换(虽然运算符两边的操作数类型相同),如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为double型。两个char类型的数据进行相关的操作也是一样(原创 2015-12-26 22:30:41 · 17030 阅读 · 0 评论 -
extern 关键字的使用 《程序员的自我修养》·笔记
extern “C”的小结 来自《程序员的自我修养》C++为了与C兼容,C++可以使用关键字extern “C”来声明或者定义一个C符号: extern "C"{ int func(int); int var; } C++会将extern “C”的大括号内的代码当做C语言代码(.c文件)处理,亦即在大括号中C++的名称修饰机制将不起作用,不同的编译器有不同的名称修饰方原创 2015-08-12 22:28:26 · 424 阅读 · 0 评论 -
VS编译报错 error MSB6006: “cmd.exe” exited with code 1.
报错 error MSB6006: “cmd.exe” exited with code 1.产生这个错误的时候,程序不会崩掉,但是错误窗口会显示上面的信息~这类问题网上有一大堆博客来解决,但是可以看出原因各不相同(文件不全、管理员权限不够、路径中包含中文、路径中含有空格…),因为这样的问题往往不是某一个甚至是某几个确定的原因造成的,当然也不排除一些固定软件的编译过程展现出一致的原因,比如这个博客:原创 2017-12-17 19:38:55 · 13139 阅读 · 2 评论