zoukankan      html  css  js  c++  java
  • principal point in my C study

    1. sizeof() 和strlen()

    sizeof() and strlen()
     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 void main()
     5 {
     6 char a[] = "good";
     7 char mystr[100]="test string";
     8 
     9 printf("sizeof a[]: %d \n"sizeof(a));
    10 printf("strlen of a[]: %d \n", strlen(a));
    11 printf("sizeof \"good\": %d \n"sizeof("good"));
    12 printf("size of 'a': %d \n"sizeof 'a'); //字符常量的类型是int,根据提升规则,它由char转换为int。结果和机器的字长相等
    13 printf("sizeof mystr[]: %d \n"sizeof mystr);
    14 printf("strlen of mystr[]: %d \n", strlen(mystr)); //在strlen()中,末尾的空字符不算数
    15 }

     输出:

    注意在C中,字符'a'的类型四int,而在C++中字符的类型为char。

     

    2. C语言中符号的重载

    static:

      在函数内部,表示该变量的值在各个调用间一直保持延续性。

      在函数这一级,表示该函数只对本文可见。

    extern:

      用于函数定义,表示全局可见(属于冗余的)。

      用于变量,表示它在其他地方定义。

    3. 什么是定义,什么是声明?

    定义:只能出现在一个地方,用于创建新的对象。它首先确定对象的类型,然后分配内存。例如:int my_array[100]

    声明:可以出现多次,用于指代其他地方(如其他文件)定义的对象,它描述对象的类型。例如:extern int my_array[];

          其实,只要记住下面的内容,就可以区分二者:

          声明相当于普通的声明:它所说的并非自身,而是描述其他地方创建的对象。ertern对象声明告诉编译器对象的类型和名字,对象的内存分配则在别处进行。由于并未在声明中为数组分配内存,所以并不需要提供关于数组长度的信息。对于多位数组,需要提供最左边一维数组之外的其他维的长度(给编译器足够的信息产生代码)。

         定义相当于特殊的声明:它为对象分配内存。 

    4. memcpy()和strcpy()

    char * strcpy ( char * destination, const char * source );
    Copy string

    Copies the C string pointed by source into the array pointed by destination, including the terminating null character.
    To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.
     
    void * memcpy ( void * destination, const void * source, size_t num );
    Copy block of memory

    Copies the values of num bytes from the location pointed by source directly to the memory block pointed by destination.
    The underlying type of the objects pointed by both the source and destination pointers are irrelevant for this function; The result is a binary copy of the data.
    The function does not check for any terminating null character in source - it always copies exactly num bytes.
    To avoid overflows, the size of the arrays pointed by both the destination and source parameters, shall be at least num bytes, and should not overlap (for overlapping memory blocks, memmove is a safer approach).

  • 相关阅读:
    [Hadoop in China 2011] 海狗不是狗 探秘支付宝准实时搜索查询
    [Hadoop in China 2011] 邵铮:揭秘FaceBook Puma演变及发展
    MongoDB学习笔记(一) MongoDB介绍及安装
    [Hadoop in China 2011] 人人网:基于Hadoop的SNS统计和聚类推荐
    运行中hadoop增加和删除datanode (*)
    第三届云计算大会 罗志国:中国移动大云的研发和实践(转载)
    [Hadoop in China 2011] 何鹏:Hadoop在海量网页搜索中应用分析
    Run hadoop example
    MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
    [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
  • 原文地址:https://www.cnblogs.com/younes/p/1646002.html
Copyright © 2011-2022 走看看