C语言小常识大杂烩

目录

1.int * (*ptr)()

2.int  (*ptr)()

3.自动类型转换和强制类型转换

4.循环结构的多重循环

5.结束语句break和continue

6.extern关键字

7.常见字符串操作函数

8.指针

9.结构体

10.for each

11.预处理命令

12.static关键字

13.宏


1.int * (*ptr)()

由于小括号的运算级比较高,结合方法又是自左向右,所以先运算(*ptr),表明定义了一个指针ptr

接下来再运算最右边的小括号(),表明是一个函数

接下来再运算* (*ptr)(),表明函数的返回值是一个指针

那么int * (*ptr)()表明定义了一个指针变量ptr,它指向一个没有参数,并且返回值是一个整型指针的函数。

2.int  (*ptr)()

由于小括号的运算级比较高,结合方法又是自左向右,所以先运算(*ptr),表明定义了一个指针ptr

接下来再运算最右边的小括号(),表明是一个函数

那么ptr是指向函数的指针变量,该函数返回一个整型的数据。

3.自动类型转换和强制类型转换

自动转换发生在不同数据类型运算时,在编译的时候自动完成。字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换。char可以转换为int,int可以转换为double,char可以转换为double。但是不可以反向。char类型数据转换为int类型数据遵循ASCII码中的对应值。

C语言小常识大杂烩_第1张图片

强制类型转换的格式:(数据类型) (表达式)。转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换。 

4.循环结构的多重循环

在实际开发一般最多用到三层多重循环。因为循环层数越多,运行时间越长,程序越复杂。另外不同循环之间也是可以嵌套的。

5.结束语句break和continue

在没有循环结构的情况下,break不能用在单独的if-else语句中。

在多层循环中,一个break语句只能跳出当前循环。

Continue语句是结束本次循环开始执行下一次循环。

6.extern关键字

用extern声明的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。如:

#include
int main()
{
    extern int x;
    printf("extern x=%d\n",x);
    return 0;
}
int x=100;

用extern声明的函数是外部函数。

7.常见字符串操作函数

函数格式 说明 举例
strlen(s) 获得字符串长度(单位为字节) strlen("abc"),结果是3
strcmp(s1,s2) 比较字符串 strcmp("ab","ac"),结果是-1
strcpy(s1,s2) 字符串拷贝 strcpy(s1,"abc")
strcat(s1,s2) 字符串拼接 strcat(s1,"abc")
atoi(s1) 字符串转换成整数 atoi("100"),结果是100

strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的。比如:

strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小,例如:

C语言小常识大杂烩_第2张图片

strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝。

strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串。

8.指针

如:交换函数,不引入指针,无法实现真正交换。

#include
void change(int *a,int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int a = 5;
    int b = 3;
    change(&a,&b);
    return 0;
}

指向数组的指针

double *p;
double arr[10];
p = arr; //p = &arr[0];
*(p+3);  //arr[3]

9.结构体

结构体是一种构造数据类型

把不同类型的数据组合成一个整体

格式:struct 结构体名{

     结构体所包含的变量或数组

};

三种定义方式:

        先定义结构体类型,再定义结构体变量(标准方式)

        定义结构体类型的同时定义结构体变量(不环保方式,只能用一次)

        直接定义结构体变量(最烂的方式)

C语言小常识大杂烩_第3张图片

10.for each

 STL中的for增强循环。

int a[4]={4,3,2,1};
for each(int var in a)
{
    cout << var << " ";
}

11.预处理命令

C语言小常识大杂烩_第4张图片

12.static关键字

静态局部变量,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。

C语言小常识大杂烩_第5张图片

普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)。

静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。

静态函数只能在声明它的文件中可见,其他文件不能引用该函数。不同的文件可以使用相同名字的静态函数,互不影响。

非静态函数可以在另一个文件中直接引用,甚至不必使用extern声明

13.宏

#define 标识符 字符串    //定义宏
#undef  标识符          //取消宏

你可能感兴趣的:(C语言小常识,c语言)