Time of Update: 2018-12-04
1.外部類型的檢查並不完美;/*exp 1:程式有源檔案a.c和源檔案b.c組成*//*源檔案a.c*/extern int n; //指明n是引用外部變數/*源檔案b.c*/long n; //指明的n的定義/*在這種情況下,C語言是不能檢測出這種錯誤的!*//*exp 2如果一個未聲明的標識符後面跟一個開括弧,預設視為傳回型別為整形*/main(){ double s; s = sqrt(2); printf("%d/n",s);}//這個錯誤已經修正了,如果未聲明,就報錯!
Time of Update: 2018-12-04
一個由c/C++編譯的程式佔用的記憶體分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。 2、堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鏈表。 3、全域區(靜態區)(static)—,全域變數和靜態變數的儲存是放在一塊的,初始化的全域變數和靜態變數在一塊地區,
Time of Update: 2018-12-04
什麼是ARP協議英文原義:Address Resolution Protocol 中文釋義:(RFC-826)位址解析通訊協定 #include <netdb.h>#include <unistd.h>#include <ctype.h>#include <errno.h>#include <signal.h>#include <string.h>#include <stdio.h>#include
Time of Update: 2018-12-04
1.記憶體位置 0 null 指標並不指向任何對象.當試圖去訪問一個NULL位置的值的時候,通常有下面這幾種情況:A.記憶體位置 0 強加了硬體級的保護,程式立即終止執行!B.記憶體位置 0 只允許讀,不允許寫;這樣,*str不過是垃圾資訊.C.記憶體位置 0 允許讀,也允許寫;這樣,錯誤的使用null指標,會造成致命傷害的!下面這個例子表明了你的機器是否允許讀/寫等;#include <stdio.h>#include <stdlib.h>void main(){
Time of Update: 2018-12-04
access()是C語言中驗證檔案的一個函數,具體的函數原型,大家可以百度之,現在舉一個應用的例子。#include <stdio.h>#include <stdlib.h>#include <io.h>int main(int argc,char* argv[]){ char str[1024]; memset(str,0,1024+1); strcpy(str,"C:\\Programs"); if(access(str,0) !
Time of Update: 2018-12-04
先看兩個小程式/*Test A*/#include <stdio.h>#include <stdlib.h>int main(){ char str[5] = "abc"; //常量進行初始化 int i = 0; while(str[i] != '/0') {printf("%c",str[i]);i++; } return 0;}運行,輸出結果為:/*Test A
Time of Update: 2018-12-04
時間類型定義: 標頭檔:time.h 定義為:time_t 某些系統定義為 typedef long time_t 擷取時間函數:time_t time(time_t * timer); time_t time_now; time(&time_now); 輸出時間函數:char *ctime(const time_t *time);
Time of Update: 2018-12-04
偶然在ChinaUnix上看到一篇關於程式調試的文章,裡面討論到了很多偵錯工具的方法,其中一個方法如下,覺得還不錯: 如果別人的程式裡malloc很多,不知道哪裡有記憶體越界, 那就把malloc, free重新定義掉,放在一個標頭檔裡,如mem.h 用gcc -include mem.h的方式重新編譯代碼,可以不修改別人的代碼來檢查記憶體問題。 (類似的,還要重定義strdup, realloc等函數)代碼如下:#define MAGIC_NUM 0x11121314 /
Time of Update: 2018-12-04
1. 三目運算子的恒等於符號的“副作用”#include <stdio.h>int main(int argc,char *argv[]){ int a = 1; int b = 2; int c = 3; a = b>c?b:c; //取bc二者最大值,無可厚非 a = 0?b:c; //取c的值 a = 1?b:c; //取b的值 a = b==c; //若b==c,則 a = 1;反正
Time of Update: 2018-12-04
1.關於字串互轉如何?? 一般來講,就是通過strlen(str)求出長度,設定中將temp,持續替換. 2.如何讓int型變數的位互換? 同樣的,但是這裡面控制長度迴圈的時候,有個技巧. for(int i = 0; (i<sizeof(int))>>1; i++); //sizeof(int),適應多平台編程,而移位1,也就是除以2的意思,正好是迴圈的次數!
Time of Update: 2018-12-04
1)
Time of Update: 2018-12-04
任何事物都不是憑空產生的,也不是一步就最佳化到位的! C語言也不例外,從一些C語言應用上面來看,有下面幾個原則: 1.空間佔用越小越好 C語言函數的傳參方式是拷貝一份參數,供程式主體使用; 因此,傳遞結構體就不如傳遞結構體指標;包括對聯合的設計,也是出於儘可能小的佔用空間; 還有就是記憶體對齊以及位域. 舉個例子,看看位域的情況:strcut CHAR { unsigned ch : 7; unsigned font : 6; unsigned size : 19
Time of Update: 2018-12-04
在C語言中,是通過下面這三個函數來完成對可變參數列表值的讀取的。va_start(ap,fmt);vsprintf(info_buf,fmt,ap);va_end(ap);使用下面的代碼來示範一下。#include <stdio.h>#include <stdlib.h>#include <stdarg.h>int TestFunc(int Flag,const char *fmt,...){va_list ap;char
Time of Update: 2018-12-04
文章目錄 快速排序演算法
Time of Update: 2018-12-04
摘要:在學習linux核心代碼及一些開源軟體的源碼(如:DirectFB),經常可以看到有關__attribute__的相關使用。本文結合自己的學習經曆,較為詳細的介紹了__attribute__相關文法及其使用。---------------------------------------------------------聲明: 此文為原創,歡迎轉載,轉載請保留如下資訊 作者:聶飛(afreez) 北京-中關村 連絡方式:afreez@sina.com (歡迎與作者交流)
Time of Update: 2018-12-04
首先掌握幾個原則: 1. 誰使用,誰建立,誰釋放! 2. char *str1,str2[],str3[N] 使用時候的側重點! 一般來說,有如下幾種使用方式: A.先看這段代碼:int test(char *str1){ char *str;//定義,使用的時候需要分配記憶體,之後需要釋放記憶體 str = (char*)malloc(sizeof(char)*20); memset(str,0,sizeof(char)*20); str = str1;
Time of Update: 2018-12-04
C語言實現字串反轉,是C語言面試中比較常見的一個問題,這裡提供一種實現方法!供大家參考!折半替換法,即定義一頭一尾指標,同時向中間走,二者互換,相遇即為互換完畢!char *consver(char *str){char temp;char *s1 = str;char *s2 = str+strlen(str)-1; for(;s1 < s2;s1++,s2--){ temp = *s1;*s1 = *s2;*s2 = temp;}return
Time of Update: 2018-12-04
題目如下:問下列代碼的列印結果為0嗎?#include <stdlib.h>#include <iostream>using namespace std;struct CLS{ int m_i; CLS( int i ) : m_i(i){} CLS() { CLS(0); }};int main(){ CLS obj; cout << obj.m_i << endl; system("
Time of Update: 2018-12-04
對於一個C語言程式而言,記憶體空間主要由五個部分組成程式碼片段(.text)、資料區段(.data)、BSS段(.bss),堆和棧組成,其中程式碼片段,資料區段和BSS段是編譯的時候由編譯器分配的,而堆和棧是程式啟動並執行時候由系統分配的。布局如下 在中,由編譯器分配的地址空間都是在串連的時候分配的,而運行時分配的空間是在程式運行時由系統分配的 BSS段:BSS段(bss segment)通常是指用來存放程式中未初始化的全域變數和靜態變數
Time of Update: 2018-12-04
C/C++中結構體(struct)知識點強化為了進一部的學習結構體這一重要的知識點,我們今天來學習一下鏈表結構。 結構體可以看做是一種自訂的資料類型,它還有一個很重要的特性,就是結構體可以相互嵌套使用,但也是有條件的,結構體可以包含結構體指標,但絕對不能在結構體中包含結構體變數。 struct test { char name[10]; float socre; test *next; };//這樣是正確的!