sizeof用法

sizeof()功能:计算数据空间的字节数
1.与strlen()比较
strlen()计算字符数组的字符数,以”\0″为结束判断,不计算为’\0’的数组元素。
而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
2.指针与静态数组的sizeof操作
指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。
注意:int *p; sizeof(p)=4;
但sizeof(*p)相当于sizeof(int);
对于静态数组,sizeof可直接计算数组大小;
例:int a[10];char b[]=”hello”;
sizeof(a)等于4*10=40;
sizeof(b)等于6;
注意:数组做型参时,数组名称当作指针使用!!
void fun(char p[])
{sizeof(p)等于4}
参考:http://blog.chinaunix.net/uid-26868581-id-3328170.html

Windows安装MinGW使用gcc和g++命令

MinGW 是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/LinuxWindows平台生成本地的Windows程序而不需要第三方C运行时库。

这样在windows下的cmd中就可以使用gccg++命令了吧?那就开始配置环境变量以及所需要的MinGW安装

1、安装在DD:MinGW

2、配置环境变量

添加环境变量中的PATH的值

D:MinGWbin(注意这里不要删除其他的PATH值,第二要改成自己安装的目录位置,第三是和前面其他的值要用英文的分号分开

新建LIB_PATH值是D:MinGWlib(这里也要改成自己安装的实际目录)

新建C_INCLUDE_PATH值是D:MinGWinclude

Continue reading

C文件输入与输出

1.fopen版本

FILE *fin,*fout;
fin = fopen(“Joyous.in”, “rb”);
fout = fopen(“Joyous.out”, “wb”);
int n;
fscanf(fin,”%d”,&n);//这里读取成功就返回1
fprintf(fout,”%d\n”,n);
fclose(fin);
fclose(fout);

2.freopen版本

freopen(“Joyous.in”,”r”,stdin);
freopen(“Joyous,out”,”w”,stdout);
int n;
scanf(“%d”,&n);
printf(“%d\n”,n);

Continue reading

C编程笔记

1.编译命令gcc test.c -o test
带上参数o就是指定编译文件名
2.printf(“%.2lf”,b)
其中前面2是小数点后位数,l是字母,f是浮点型变量
备注:整型用%d格式化输出,浮点型用%lf格式化输出,低精度转换成高精度之后进行运算输出
3.sqrt是计算数字的算数平方根
4.scanf(“%d%d”,&a,&b)这样输入的时候可以使用空格或者enter来分割两个变量
5.const double pi = 4.0 * atan(1.0);定义一个常量(值始终不可更改)
6.各类型数据取值范围(小心溢出)
7.浮点运算可能存在误差,所有应该考虑到浮点误差。进行浮点比较的时候一般用floor(m+0.5)比较
8.要计算只包含加法,减法,乘法的整数表达式除以正整数n的余数,可以在每步计算之后就对n取余,结果不变
9.windows下输入完毕enter之后按ctlr+z,然后再按enter,linux是ctrl+D可以结束输入

GCC简单使用说明

1.编译单个文件

hello.c代码如下
#include<stdio.h>
int main()
{
printf(“hello world\n”);
return 0;
}

然后保存,然后使用gcc hello.c
这样就会自动生成一个a.out文件
执行./a.out就会输出hello world

2.编辑多个文件

message.c代码如下
#include<stdio.h>
void seeyou(void)
{
printf(“goodbye\n”);
}
hello.c文件内容如下
#include<stdio.h>
void seeyou();
int main()
{
seeyou();
printf(“hello.c\n”);
return 0;
}
然后保存,然后使用gcc -c message.c会生成message.o
然后使用gcc -c hello.c会生成hello.o
然后使用gcc -o hello message.o hello.o
然后可以执行./hello看到输出goodbye和hello.c
上面的命令可直接使用gcc -o message.c hello.c这样就不会生成中间文件

gcc常用选项
-c 只预处理、编译和汇编源程序,不进行连接。编译器对每一个源程序产生一个目标文件。
-o file 确定输出文件为file。如果没有用-o选项,缺省的可执行文件的输出是 a.out,目标文件和汇编文件的输出对source.suffix分别是source.o和source.s,预处理的C源程序的输出是标准输出stdout。
-Dmacro或-Dmacro=defn 其作用类似于源程序里的#define。例如:% gcc -c -DHAVE_GDBM -DHELP_FILE=\”help\” cdict.c其中第一个- D选项定义宏HAVE_GDBM,在程序里可以用#ifdef去检查它是否被设置。第二个-D选项将宏HELP_FILE定义为字符串“help”(由于反斜线的作用,引号实际上已成为该宏定义的一部分),这对于控制程序打开哪个文件是很有用的。
-Umacro 某些宏是被编译程序自动定义的。这些宏通常可以指定在其中进行编译的计算机系统类型的符号,用户可以在编译某程序时加上 -v选项以查看gcc缺省定义了哪些宏。如果用户想取消其中某个宏定义,用-Umacro选项,这相当于把#undef macro放在要编译的源文件的开头。
-Idir 将dir目录加到搜寻头文件的目录列表中去,并优先于在gcc缺省的搜索目录。在有多个-I选项的情况下,按命令行上-I选项的前后顺序搜索。dir可使用相对路径,如-I../inc等。

工欲善其事,必先利其器之Linux下汉化Codeblocks

最近补习数据结构和算法,顺便把在学校丢的东西都找回来~于是就想重新学习下C/C++,工欲善其事,必先利其器.网

上推荐使用codeblocks,下完安装之后发现是英文的(注释:英文水平不咋滴)

汉化!?网上找了半天都是windows下的汉化~~终于在找到一个汉化包(.7z格式的~不管了先试试再说)

然后把文件解压到/usr/share/codeblocks目录下,打开codeblocks~~~~~

看到的是???汉化吧?!

附件:locale

附:code blocks百科:http://baike.baidu.com/view/1562377.htm

code blocks官方网址:http://www.codeblocks.org/

code blocks简单是使用说明;http://hi.baidu.com/qhh_2008/item/dfa9c8c5df13f679cfd4f818

C常见错误提示[间断更新]

1.error: lvalue required as left operand of assignment

表达式中的=号左边应该有个运算符(或者变量)
提示:这样错误提示可能是判断中的==写成了=

2.error: invalid suffix “n” on integer constant
提示:这样的错误有可能是你把3*n写成了3n

3.error: ‘min’ undeclared(first use in this function)
提示:这样的错误可能好似你没有声明min变量

C编程常用数学函数集锦

double sqrt(double x) 返回x的开方
double cos(double x) 返回x的余弦cos(x)值,x为弧度
double sin(double x) 返回x的正弦sin(x)值,x为弧度
double pow(double x,double y) 返回x的y次方的值
double fabs(double x) 返回双精度参数x的绝对值
int abs(int i) 返回整型参数i的绝对值
double floor(double x) 返回不大于x的最大整数
double ceil(double x) 返回不小于x的最小整数

GCC编译已经引入math.h文件提示cos,sin等函数未定义

问题起因:
Joyous.c

[c]
#include<stdio.h>
#include<math.h>
int main()
{
const double PI=4.0*atan(1.0);
//输入正整数n,输出n度的正弦,余弦函数
int n;
double f,s1,c1;
scanf("%d",&n);
f=n*PI/180;
s1=sin(f);
c1=cos(f);
printf("%.2lf,%.2lf\n",s1,c1);
return 0;
}
[/c]

使用gcc Joyous.c
提示:
undefined reference to `sin’
undefined reference to `cos’
初步解决办法:gcc -lm Joyous.c
问题原因,linux下不会自动链接数学库,需要手动链接一次。但是每次都得这么带个lm?麻烦吗?
现在问题是怎么可以自动加载呢?