c 学习

1、环境linux

  1. 环境c++

    linux yum install gcc-c++
     mac 改成 brew install gcc 若是mac么有安装brew须要用ruby安装
    
     $ gcc hello.c
     $ ./a.out
     Hello, World!
  2. 请确保您的路径中已包含 gcc 编译器,并确保在包含源文件 hello.c 的目录中运行它。数组

  3. 若是是多个 c 代码的源码文件,编译方法以下:ruby

    $ gcc test1.c test2.c -o main.out $ ./main.out test1.c 与 test2.c 是两个源代码文件。dom

  4. 回调函数函数

    函数指针做为某个函数的参数指针

    函数指针变量能够做为某个函数的参数来使用的,回调函数就是一个经过函数指针调用的函数。code

    简单讲:回调函数是由别人的函数执行时调用你实现的函数。

    如下是来自知乎做者常溪玲的解说:事件

    你到一个商店买东西,恰好你要的东西没有货,因而你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,而后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫作触发了回调关联的事件,店员给你打电话叫作调用回调函数,你到店里去取货叫作响应回调事件。get

    1. 实例

      实例中 populate_array 函数定义了三个参数,其中第三个参数是函数的指针,经过该函数来设置数组的值。

      实例中咱们定义了回调函数 getNextRandomValue,它返回一个随机值,它做为一个函数指针传递给 populate_array 函数。

      populate_array 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。

    2. 实例

      #include <stdlib.h>  
       #include <stdio.h>
      
       // 回调函数
       void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
       {
       	for (size_t i=0; i<arraySize; i++)
       		array[i] = getNextValue();
       }
      
       // 获取随机值
       int getNextRandomValue(void)
       {
       	return rand();
       }
      
       int main(void)
       {
       	int myarray[10];
       	populate_array(myarray, 10, getNextRandomValue);
       	for(int i = 0; i < 10; i++) {
       		printf("%d ", myarray[i]);
       	}
       	printf("\n");
       	return 0;
       }

      编译执行,输出结果以下:

      16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709

  5. 结构体

    struct 标识
  6. 按位运算 101010 101010 101010 & 011100 | 011100 ^ 011100 --------- ---------- ---------- 001000 111110 110110

  7. 位域

    位域声明 在结构内声明位域的形式以下:

    struct
     {
       type [member_name] : width ;
     };

    下面是有关位域中变量元素的描述:

    元素 描述
    type 整数类型,决定了如何解释位域的值。类型能够是整型、有符号整 型、无符号整型。
    member_name 位域的名称。
    width 位域中位的数量。宽度必须小于或等于指定类型的位宽度

    下面的结构定义指示 C 编译器,age 变量将只使用 3 位来存储这个值,若是您试图使用超过 3 位,则没法完成。让咱们来看下面的实例:

    #include <stdio.h>
     #include <string.h>
    
     struct
     {
       unsigned int age : 3;
     } Age;
    
     int main( )
     {
        Age.age = 4;
        printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
        printf( "Age.age : %d\n", Age.age );
    
        Age.age = 7;
        printf( "Age.age : %d\n", Age.age );
    
        Age.age = 8; // 二进制表示为 1000 有四位,超出
        printf( "Age.age : %d\n", Age.age );
    
        return 0;
     }
    
     当上面的代码被编译时,它会带有警告,当上面的代码被执行时,它会产生下列结果:
    
     Sizeof( Age ) : 4
     Age.age : 4
     Age.age : 7
     Age.age : 0
  8. typedef vs #define

    #define 是 C 指令,用于为各类数据类型定义别名,与 typedef 相似,可是它们有如下几点不一样:
    
     typedef 仅限于为类型定义符号名称,#define 不只能够为类型定义别名,也能为数值定义别名,好比您能够定义 1 为 ONE。
     typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
相关文章
相关标签/搜索