1、文件组合
1、关于函数
myfun.c
#include "myfun.h"
myfun.h
int myfun(int a, int b);
2、关于主程序
main.c
#include "myfun.h"
2、编译 gcc myfun.c main.c -o main
3、数组作为函数参数
在函数内部无法通过这个指针获得数组长度,必须将数组长度作为函数参数传递到函数内部,于是就有了第二个参数 n。
void func(int p[], int n)
3、获取数组长的办法
(1)
int a[10] = {0};
int cnt = sizeof(a) / sizeof(a[0]);
(2)利用库函数
strlen;
4、 返回数组指针
函数int *a(void)中定义的数组 a[4];属于局部变量,在子函数结束时会被释放,所以返回的指针变成野指针,会乱码;简单的解决方法有两种,1. 将数组定义在主函数之前(#include <stdio.h>下面),那么就变成了全局变量,不会被释放了;2.使用malloc或者calloc开空间后再赋给这个数组,这样也不会被释放了;第一种方法有缺
其中malloc的用法
int *p;
p=(int *)malloc (100*sizeof(int));
5、防止头文件重复包含
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... //一些声明语句
#endif
6、 对于sin函数来说 sin(1)中的1代表的是弧度制,转化成角度制则是1/(pi/2)。此函数与matlab中的函数是一样的。
7、从txt中读入数据,往txt中写入数据
//读
int buf[MAX_LINE]; /*缓冲区*/
FILE* fp; /*文件指针*/
int len; /*行字符个数*/
if ((fp = fopen("my_final_78k_v3.txt", "r")) == NULL)
{
perror("fail to read");
exit(1);
}
int k;
for( k=0;k<MAX_LINE-1;k++)
{
fscanf(fp,"%d\n",&buf[k]);
printf("%d\n",buf[k]);
}
//写
FILE *fpWrite=fopen("data_test.txt","w");
if(fpWrite==NULL)
{
return 0;
}
int i;
for( i=0;i<MAX_LINE-1;i++)
fprintf(fpWrite,"%d\n",corr_ptr[i]);
fclose(fpWrite);
8、如果利用gcc编译c文件生成.exe或者.out文件后,虽然显示有生成,但是执行后,显示no such file,则表明编译成功,但是执行不成功,可能是读写文件的问题,大概率是跟路径分隔符有关。
9、声明大数组
两种方式:
静态数组 static int a[10000];
动态生成 float * pArr = (float *)malloc(sizeof(float)*(MAX_LINE+CHIRP_UP));
注意,尽量要采用动态生成的方式,不然可能会造成SIGSEGV (Segmentation fault)
10、从指针中读出数据,不能采用的方式
while(corr_ptr != NULL),因为数据结尾可能不是NULL
11、利用gdb调试 ,只需要 .o文件就可以
12、for循环
for(exp1;exp2;exp3)
{ exp4}
执行顺序是exp1 exp2 exp4 exp3 exp2.....
for(int i = 0 ; i< k; i++){exp}
则exp执行k次
14 ,编译带有math库函数的程序,要加入编译选项-lm
要注意,-lm一定要加在最后 ,l就是L的小写形式
15、当定义一个int型的变量的时候,一定需要对其进行初始化,不然可能会产生错误的数值。