Time of Update: 2017-01-18
在C語言中,函數的參數不僅可以是整數、小數、字元等具體的資料,還可以是指向它們的指標。用指標變數作函數參數可以將函數外部的地址傳遞到函數內部,使得在函數內部可以操作函數外部的資料,並且這些資料不會隨著函數的結束而被銷毀。像數組、字串、動態分配的記憶體等都是一系列資料的集合,沒有辦法通過一個參數全部傳入函數內部,只能傳遞它們的指標,在函數內部通過指標來影響這些資料集合。有的時候,對於整數、小數、字元等基本類型資料的操作也必須要藉助指標,一個典型的例子就是交換兩個變數的值。有些初學者可能會使用下面的
Time of Update: 2017-01-18
C語言中沒有特定的字串類型,我們通常是將字串放在一個字元數組中,這在《C語言字元數組和字串》中已經進行了詳細講解,這裡不妨再來示範一下:#include <stdio.h>int main(){ char str[] = "http://c.biancheng.net"; int len = strlen(str), i; //直接輸出字串 printf("%s\n", str); //每次輸出一個字元 for(i=0; i<len; i++){ printf("%c",
Time of Update: 2017-01-18
數組(Array)是一系列具有相同類型的資料的集合,每一份資料叫做一個數組元素(Element)。數組中的所有元素在記憶體中是連續排列的,整個數組佔用的是一塊記憶體。以int arr[] = { 99, 15, 100, 888, 252 };為例,該數組在記憶體中的分布如下圖所示:定義數組時,要給出數組名和數組長度,數組名可以認為是一個指標,它指向數組的第 0 個元素。在C語言中,我們將第 0 個元素的地址稱為數組的首地址。以上面的數組為例,下圖是 arr
Time of Update: 2017-01-18
資料在記憶體中的地址也稱為指標,如果一個變數儲存了一份資料的指標,我們就稱它為指標變數。在C語言中,允許用一個變數來存放指標,這種變數稱為指標變數。指標變數的值就是某份資料的地址,這樣的一份資料可以是數組、字串、函數,也可以是另外的一個普通變數或指標變數。現在假設有一個 char 類型的變數 c,它儲存了字元 'K'(ASCII碼為十進位數 75),並佔用了地址為 0X11A 的記憶體(地址通常用十六進位表示)。另外有一個指標變數 p,它的值為 0X11A,正好等於變數 c
Time of Update: 2017-01-18
前言首先先聲明一些常識,如果你對這些常識還不理解,請先去彌補一下基礎知識: 1、實際上並不存在多維陣列,所謂的多維陣列本質上是用一維數組類比的。 2、數組名是一個常量(意味著不允許對其進行賦值操作),其代表數組首元素的首地址。 3、數組與指標的關係是因為數組下標操作符[],比如,int a[3][2]相當於*(*(a+3)+2)
Time of Update: 2017-01-18
電腦中所有的資料都必須放在記憶體中,不同類型的資料佔用的位元組數不一樣,例如 int 佔用4個位元組,char 佔用1個位元組。為了正確地訪問這些資料,必須為每個位元組都編上號碼,就像門牌號、社會安全號碼一樣,每個位元組的編號是唯一的,根據編號可以準確地找到某個位元組。下圖是 4G 記憶體中每個位元組的編號(以十六進位表示):我們將記憶體中位元組的編號稱為地址(Address)或指標(Pointer)。地址從 0 開始依次增加,對於 32 位環境,程式能夠使用的記憶體為 4GB,最小的地址為 0
Time of Update: 2017-01-18
本文執行個體講述了C語言實現順序表(線性表)的方法。分享給大家供大家參考,具體如下:一:順序表代碼實現#ifndef _SEQ_LIST_H#define _SEQ_LIST_H#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#define ElemType float //以float類型測試演算法通用性,而不是以慣用的int#define
Time of Update: 2017-01-18
String在C++的學習生涯我中發現String類的功能十分強大,所以我們是很有必要類比實現它的,況且在面試的時候類比實現一個String類也是面試官經常會考的,但是因為外界因素的限制我們是不可能類比的和庫裡的string一致的(C++庫裡的string功能更強大),所以今天我們只類比實現string的準系統-建構函式,拷貝建構函式,解構函式,賦值運算子多載,運算子+=的重載,運算子[]的重載,c_str(得到一個C風格的字元指標,可操作字串),Size,Push_Back,Insert(深拷
Time of Update: 2017-01-18
謹記:在C語言中,當兩種不同類型之間運算時,低位元組長度類型會向高自己長度類型轉換,有符號會向無符號類型轉換。舉例子如下:#include <stdio.h>void func(void){ int i = 1; unsigned char c1 = 1; signed char c2 = -1; if (c2 > i){ printf("\r\n -1 > 1"); } else{ printf("\r\n -1 <= 1"); }
Time of Update: 2017-01-18
功能介紹程式的功能是從外部讀取一個包括int型資料的文字檔,然後將它儲存到內部臨時數組,對數組進行排序後,以文本形式輸出到指定的檔案上。因為是int類型的資料,沒有很嚴重的損失精度的問題。正常運行要求:包括資料的源檔案內不能包括其他任何除數字和空白字元(空格,定位字元,分行符號)之外的任何字元,源檔案最開始必須是數字字元,要保證源檔案的資料計數正確。同時保證檔案名稱有效。運行結果data.txt:obj.txt:完整代碼警告:著作權,謹供參考!#include
Time of Update: 2017-01-18
實現順序表的插入,刪除,尋找,輸出操作在C語言中經常用到。下面小編給大家整理實現代碼,一起看下吧代碼如下所示:#include<iostream>using namespace std;#define MAXSIZE 15typedef int DataType;typedef struct{DataType data[MAXSIZE]; //通常用一位元組來描述順序表的資料存放區int SeqLength; /*線性表長度*/} SeqList;SeqList
Time of Update: 2017-01-18
廢話不多說了,直接給大家上關鍵代碼了。#pragma once#include <assert.h>template<class T>class SeqList{public:SeqList():_a(NULL),_size(1),_capacity(1){}SeqList(T* a, size_t size):_a(new T[size]),_size(size),_capacity(size){for (size_t i = 0; i < _size; ++i)
Time of Update: 2017-01-18
以下給出幾種簡單的廣義表模型: 由上圖我們可以看到,廣義表的節點類型無非head、value、sub三種,這裡設定枚舉類型,利用枚舉變數來記錄每個節點的類型:enum Type{ HEAD, //前端節點 VALUE, //值節點 SUB,
Time of Update: 2017-01-18
strcpy和memcpy都是標準C庫函數,它們有下面的特點。strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。memcpy提供了一般記憶體的複製。即memcpy對於需要複製的內容沒有限制,因此用途更廣。mem系列函數是面試的時候常考的知識點,我們需要熟練掌握這三個函數的原理和代碼實現,要能準確無誤的寫出代碼。memcpy、memset和memset三個函數在使用過程中,均需包含以下標頭檔://在C中#include<string
Time of Update: 2017-01-18
前言 我們知道,在數學中,數值的大小是沒有上限的,但是在電腦中,由於字長的限制,電腦所能表示的範圍是有限的,當我們對比較小的數進行運算時,如:1234+5678,這樣的數值並沒有超出電腦的表示範圍,所以可以運算。但是當我們在實際的應用中進行大量的資料處理時,會發現參與運算的數往往超過電腦的基礎資料型別 (Elementary Data
Time of Update: 2017-01-18
介紹 sscanf()為C語言標準庫函數,用於從指定字串中讀入與指定格式相符的資料。函數原型聲明在stdio.h標頭檔中:int sscanf(const char *str, const char *format, ...);
Time of Update: 2017-01-18
前言我們在編程實現演算法的過程中,往往需要使用到隨機數。由於電腦是一台以邏輯為基礎的機器,沒法做到真正的隨機(大概量子電腦可以?)。所以電腦產生的是偽隨機數,供我們使用。我們使用C語言的rand函數,產生的也是偽隨機數。c語言之rand函數的使用1、寫入標頭檔#include <stdlib.h> #include <stdio.h> #include <time.h>2、變數的定義void main( void ) { int i,k;3、srand(
Time of Update: 2017-01-18
前言良好的計時器可協助程式開發人員確定程式的效能瓶頸,或對不同演算法進行效能比較。但要精確測配量序的已耗用時間並不容易,因為進程切換、中斷、共用的多使用者、網路流量、快取訪問及轉移預測等因素都會對程式計時產生影響。下面看看小編為大家整理幾個計時方法方法一:如果是想統計某個程式的已耗用時間,那麼可以使用time ./a.out方法二:如果是想對某個函數或者語句進行計時,那麼有別的方法。比如說,gettimeofday函數。直接貼範例程式碼:#include
Time of Update: 2017-01-18
前言C++函數對象是通過一張虛函數表來實現的。簡稱為V-Table。在這個表中,主是要一個類的虛函數的地址表,這張表解決了繼承、重載的問題,保證其容真實反應實際的函數。應用假如我們實現了這樣的一個單向鏈表:class LinkedListNode { int data_; LinkedListNode *next_;};class LinkedList { public: void insert(LinkedListNode* &p); void del(LinkedListNode *p);
Time of Update: 2017-01-18
本文針對C++建構函式進行深度探究,供大家參考,具體內容如下1、引子: 以下代碼中的輸出語句輸出0嗎,為什嗎?struct Test{ int _a; Test(int a) : _a(a) {} Test() { Test(0); }};Test obj;cout << obj._a << endl; 輸出為:-8589934602、剖析上面代碼的輸出為一個垃圾值,也就是說obj調用建構函式並沒有對成員進行初始化工作,雖然預設無參構造Test(