对C加深理解

一、字符串标准函数

字符串标准函数的原型在头文件string.h中

1.输入字符串:gets(字符数组名);该函数输入的字符串中允许包含空格,而scanf()不允许
2.输出字符串:puts(字符数组名)
3.求字符串长度:strlen(字符数组名)
二、除法

1.除数、被除数都是整数,结果也是整数。结果不能整除的情况下直接丢掉小数
2.除数、被除数有一个小数,结果也是小数,并且是double类型

三、数组

1. 声明数组a[11]表示有11个数,即a[0]到a[10]
2. 内层外层循环的变量不能相同

四、结构体

1.理解
结构体其实是将数组、变量、指针变量等做了个封装,成为我们定义的一个新的数据类型。我们就可以把封装起来的内容作为整体对待。新数据类型每定义一个变量,就可以同时存储多个变量、数组等。
2.使用

1 struct queue
2 {
3 int data[100];//队列的主体,用来存储内容
4 int head;//队首
5 int tail;//队尾
6 };

* struct是结构体关键字,queue是为结构体起的名字
* 定义结构体的变量时不能忽略掉struct,例如:struct queue q;
* 末尾有分号
* 通常main函数外面
3. 成员运算符 "."
声明的结构体变量用来访问结构体内部成员。例如:

 1 struct queue
 2 {
 3 int data[100];//队列的主体,用来存储内容
 4 int head;//队首
 5 int tail;//队尾
 6 };
 7 
 8 
 9 struct queue q;
10 q.head=1;
11 q.tail=1;

4.结构体指针运算符 "->"
指向结构体的指针用来访问结构体内部成员。例如:

 1 struct node
 2 {
 3 int data;
 4 struct node *next;
 5 }
 6 struct node *p;
 7 p=(struct node *)malloc(sizeof(struct node));
 8 scanf("%d",&a);
 9 p->data=a; //数据存储到当前节点的data域中
10 p->next=NULL;

五、指针和malloc函数

1.指针
(1)指针存储着一个内存空间的地址
(2)定义一个指针

int a;
int * p;

定义一个指针,只需在变量前面加一个"*"号。这里的指针只能存储一个**存放整数的内存空间**的地址

(3)指针如何存储地址

p = &a;

"&"叫取地址符。这样整形指针p获得了整型变量a的地址。理解为指针p指向了整型变量a

(4)可以通过指针p来操作变量a
例如,输出变量a的值

1 int a=10;
2 int * p;
3 p=&a;
4 printf("%d",* p);


这里的 * 号是间接访问运算符。作用是取得指针p所指向的内存中的值。

(5)C语言中 * 号有三个用途
* 乘号。加减乘除
* 声明指针变量。在定义指针变量时使用,如:int * p;
* 取得指针所指向的内存中的值。简介访问运算符。例如printf("%d",* p);

2.malloc函数
(6)在内存中存储整数10
* int a=10;
* malloc(4);
(7)使用malloc函数会从内存中申请分配指定字节大小的内存空间。此处申请的是4个字节。不知道int类型4个字节还可以通过sizeof(int)获取int类型所占字节数。申请好4个字节空间后,就需要用一个指针来指向这个空间。

1 int * p;
2 p=(int * )malloc(sizeof(int));

需要注意的是,malloc函数返回类型是void * 类型。void * 表示未确定类型的指针。在C语言和C++,可被强制转换为任何其他类型的指针。此处我们将其强制转化为整形指针

(8)指针存储的是某空间地址,那为什么分不同类型的指针呢?
是为了让系统知道某空间应该取多少个连续内存作为一个数据。
(9)例子
存储整数10的代码如下

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5 int *p;
 6 p=(int * )malloc(sizeof(int));
 7 * p=10;
 8 printf("%d",* p);
 9 return 0;
10 }

(10)为什么要用如此复杂的办法存储数据?
预先的方法我们必须预先准确的知道所需变量的个数,也就是说我们必须定义出所有变量。定义一百个,程序就只能存储一百个。通过malloc函数我们可以在程序运行的过程中根据实际情况来申请空间

最后:个人觉得指针和malloc函数谁都离不开谁。malloc申请的内存需要指针指示,而指针用来指示一个不确定的空间才发挥了真正作用。

六、其他

getchar();和system("pause")都可以用来防止程序结果一闪而过。后者包含在头文件stdlib.h中

上一篇:自定义网络,网络连通


下一篇:Linux设备驱动--阻塞与非阻塞I/O