程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習筆記(四)

C語言學習筆記(四)

編輯:關於C語言

1.   char *name = malloc(20);

  name = "abcdef";

這兩條語句合起來會導致內存洩露,因為name先指向堆(heap),後又指向了常量區。

2.共用體所有的成員共用一段內存:

  union data{

    short int i;

    char ch;

  }share;

  int a = share.ch;表示用(char)的格式解釋共用體所占的空間。a.任何時刻只有一個變量。b.不能在定義的時候賦值。c.同類型的共用體變量是可以整體賦值的。d.共用體變量起作用的是最後一次存放的成員。

example:

  

[root@localhost test]# gcc 12_13_2.c

[root@localhost test]# ./a.out

65

[root@localhost test]# cat 12_13_2.c

#include <stdio.h>

union data

{

        short int i;

        char ch;

}share;

int main()

{

        int a;

        share.i = 65+256;

        a = share.ch;       //表示用(char)的格式解釋共用體所占的空間

        printf("%d\n",a); //結果是65

}

3.malloc()分配後不初始化數據,calloc()分配後數據初始化為零。realloc()分配後所返回的指針不一定是原來的那個指針。

4.結構體的對齊特性:

  結構體內的元素具有對齊特性(一般是4字節對齊),結構體本身也有對齊特性(與其所占內存最大的那個元素的大小對齊)。而且整個結構體的長度必須是齊對齊特性的倍數。

  兩個同類型的結構體可以整體賦值,如

  struct AnyOne a, b;

  a = b;    //這是可以的

5.NULL在C和C++中的定義:

  

  #undef NULL

  #if defined(__cplusplus)

    #define NULL 0

  #else

    #define NULL ((void *)0)

  #endif

6.查看堆(heap)的分配和釋放:

  [root@localhost test]# valgrind --tool=memcheck --leak-check=full ./a.out

7.umask的作用:將對應的位取反,若umask=022,則將組和其他用戶的w權限清零。

8.判斷一個變量是不是無符號數:

  #define IS_UNSIGNED(a)   ((a >= 0) ? (~a > 0 ? 1 : 0) : 0)

9.

[root@localhost test]# cat 12_13_4.c

#include <stdio.h>

#include <string.h>

void func(char str[50])

{

        printf("%d, %d\n", sizeof(str), strlen(str));

}

int main()

{

        char s[50] = "abcdefght";

        func(s);

}

[root@localhost test]# gcc 12_13_4.c

[root@localhost test]# ./a.out

4, 9

[root@localhost test]#

   void func(char str[50])這裡的50沒有任何意義。sizeof(str)這裡str代表數組首元素的地址。

10.

[root@localhost test]# cat 12_13_5.c

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

        char stra[] = "HelloWorld";

        char *strb = stra;

        printf("%d, %d\n", sizeof(stra), sizeof(strb++)); //stra代表整個數組,11是因為要算上'\0'

        printf("%d, %d\n", strlen(strb), strlen(strb++)); //參數從右到左計算

    //sizeof()是個關鍵字,在預編譯時已經計算出了大小,不做運算

}

[root@localhost test]# gcc 12_13_5.c

[root@localhost test]# ./a.out

11, 4

9, 10

[root@localhost test]#

11.

  函數指針:

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved