C语言学习

  1. char *argv[]:指针数组;
    argv[]是数组,数组的元素是地址(就是指针),地址的值是字符型数据(char)。

  2. strcmp函数

     strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是:  
    
             i=strcmp(字符串,字符串);
    
     其中,字符串1、字符串2均可为字符串常量或变量;
     i   是用于存放比较结果的整型变量。比较结果是这样规定的:  
    

①字符串1小于字符串2,strcmp函数返回一个负值;

②字符串1等于字符串2,strcmp函数返回零;

③字符串1大于字符串2,strcmp函数返回一个正值;那么,字符中的大小是如何比较的呢?来看一个例子。

     实际上,字符串的比较是比较字符串中各对字符的ASCII码。
     首先比较两个串的第一个字符,若不相等,则停止比较并得出大于或小于的结果;
     如果相等就接着 比较第二个字符然后第三个字符等等。
     如果两上字符串前面的字符一直相等,像"disk"和"disks"  
     那样,   前四个字符都一样,   然后比较第 五个字符,  
     前一个字符串"disk"只剩下结束符'/0',后一个字符串"disks"剩下's',
     '/0'的ASCII码小于's'的ASCII 码,所以得出了结果。
     因此无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。

注意:字符串是数组类型而非简单类型,不能用关系运算进行大小比较。

     if("ABC">"DEF")   /*错误的字符串比较*/

     if(strcmp("ABC","DEF")   /*正确的字符串比较*/

3.strcpy函数

     strcpy函数用于实现两个字符串的拷贝。一般形式是:  

             strcpy(字符中1,字符串2)

     其中,字符串1必须是字符串变量,而不能是字符串常量。
     strcpy函数把字符串2的内容完全复制到字符串1中,而不管字符串1中原先存放的是什么。
     复制后,字符串2保持不变。  

例:

     注意,由于字符串是数组类型,所以两个字符串复制不通过赋值运算进行。  

     t=s;   /*错误的字符串复制*/

     strcpy(t,s);   /*正确的字符串复制*/

4.void *memset(void *s,int c,size_t n)

总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

5.const

volatile

  1. char strchr(const char _Str,char _Val)
    指针函数,返回类型为char型指针的函数。
    查找字符串_Str中首次出现字符_Val的位置。
    返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。
  2. sizeof用法:返回值跟存储的对象、结构、数组所存储的内容没有关系,会把\0计入字符串长度。
    sizeof(….)是运算符\操作符,结果类型为size_t,在头文件中typedef 为unsigned int,其值在编译时计算好的。
    int a[5];
    sizeof(a[5])的值在32 位系统下为4。并没有出错,为什么呢?sizeof 是关键字不是函数。函数求值是在运行的时候,而关键字sizeof 求值是在编译的时候。虽然并不存在a[5]这个元素,但是这里也并没有去真正访问a[5],而是仅仅根据数组元素的类型来确定其值。所以这里使用a[5]并不会出错。
    结构体的sizeof:
    让宽度为2的基本数据类型都位于能被2整除的地址上;
    让宽度为4的基本数据类型都位于能被4整除的地址上。
  3. strlen用法:计算字符串长度,不区分是数组还是指针,以“\0”为字符串结束标记,读到\0为止的长度,不把\0计入字符串长度。
    strlen(….)是函数,要在运行时才能计算。参数必须是字符型指针(char *)。
  4. malloc用法
  5. malloc返回值
  6. malloc使用中不释放内存的结果
  7. 数组和指针。
  8. 汇编中入栈push,出栈pop;
  9. 如何用指针指向一个二维数组的元素;
  10. 堆和栈的区别,堆和栈的主要应用场合。
  11. Linux系统调用
  12. Linux系统中锁
  13. static声明的全局变量在模块外的值
  14. 写一个简单的排序算法
  15. size用法
     struct A
        {
                int a;
                char b[8];
                short c;
       }
   short 型占用2个字节。
    size(A)=int a[5];
    a[0]是一个元素,a 是整个数组
    &a[0]是数组首元素的首地址,

&a是数组的首地址。时其意义与&a[0]是一样,代表的是数组首元素的首地址,而不是数组的首地址。但是这仅仅是代表,并没有一个地方来存储这个地址,也就是说编译器并没有为数组a分配一块内存来存其地址,这一点就与指针有很大的差别。a 不能作为左值。我们只能访问数组的某个元素而无法把数组当一个总体进行访问。所以我们可以把a[i]当左值,而无法把a当左值。其实我们完全可以把a 当一个普通的变量来看,只不过这个变量内部分为很多小块,我们只能通过分别访问这些小块来达到访问整个变量a 的目的。
a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是a[0]的
首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址,&a+1 是下一个数组的首地址。
17. 如何比较准确的计算程序过程中栈的大小。
18. extern 用法
extern 可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,下面的代码用到的这些变量或函数是外来的,不是本文件定义的,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
extern用在变量声明中常常有这样一个作用,你在.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在.h中并用extern来声明。
19. 七层网络结构包括什么
OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。
20. int memcmp(const void *buf1, const void *buf2, unsigned int count);
比较内存区域buf1和buf2的前count个字节。
所需头文件#include <string.h>#include<memory.h>
返回值

当buf1<buf2时,返回值小于0
当buf1==buf2时,返回值=0
当buf1>buf2时,返回值大于0
  1. 原型:char *strstr(const char *str1, const char *str2);
    所需头文件#include<string.h>
    找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。
  2. 回车 代码:CR ASCII码:/ r ,十六进制,0x0d,回车的作用只是移动光标至该行的起始位置;
    换行 代码:LF ASCII码:/ n ,十六进制,0x0a,换行至下一行行首起始位置
  3. char *strrchr(const char *str, char c);
    所需头文件#include<string.h>
    找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回从字符串中的这个位置起,一直到字符串结束的所有字符。如果未能找到指定字符,那么函数将返回NULL。
  4. sscanf()
    是C语言中从一个字符串中读进与指定格式相符的数据的函数。
    函数原型为:
    Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
  int scanf( const char *format [,argument]... );

  
   sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.
原型: int sscanf (const char *str,const char *format,........);
说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。
成功则返回参数数目,失败则返回0。

  说明:
  sscanfscanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
  其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
  注:
  

    1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
  2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
  3、width表示读取宽度。
  4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
  5、type :这就很多了,就是%s,%d之类。
        无符号整数的”%u”
  6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
  支持集合操作:
  %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
  %[aB'] 匹配a、B、'中一员,贪婪性
  %[^a] 匹配非a的任意字符,贪婪性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值