C++初始编程及相关的问题总结
這篇文章是根據之前完成的“數(shù)字信號處理器”這門課的作業(yè)
運行環(huán)境及建工程步驟
創(chuàng)建工程項目:
Visual Studio(VS)后,點擊菜單欄第一個鍵,文件 -> 新建-> 項目-> 設置項目名稱以及存儲位置-> 選擇Win32控制臺應用程序-> 勾選“為解決方案創(chuàng)建目錄”-> 下一步-> 下一步-> 勾選“空項目”-> 完成。
更新VS2010,或者卸載VS2012安裝2010后,建立Win32 Console Project/MFC項目時會出現(xiàn)”LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: 文件無效或損壞”的錯誤。
解決方案:(1):將 項目——項目屬性——配置屬性——連接器——清單文件——嵌入清單 “是”改為“否”。若還不能解決問題進入第二步。
(2):查看計算機是否為64bit操作系統(tǒng),如是,繼續(xù)如下操作。
查找是否有兩個cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右鍵屬性—詳細信息, 查看兩者版本號,刪除/重命名較舊的版本,或者重新設置Path變量。
治本的辦法是第二步,刪除舊版本的cvtres.exe后,就不需要每次都設置配置了。#include<***.h>和#include"***.h"的區(qū)別
- #include<***.h>,用于系統(tǒng)頭文件,直接從編譯器自帶的函數(shù)庫中尋找文件。在#include指令里,系統(tǒng)頭文件的文件名要放在尖括號里給出,這是告訴編譯器:應該到“標準的”地點尋找這個文件:#include <stdio.h>
#include"***.h",用于自定義頭文件,是先從自定義的文件中找,如果找不到在從函數(shù)庫中尋找文件。
頭文件是一些以.h作為擴展名的標準文本文件。一般情況下,都應該把自定義的頭文件和其余的程序文件放在同一個子目錄里,或者在主程序目錄下專門創(chuàng)建一個子文件夾來集中存放它們。參考:C++中“頭文件”的定義和使用
自定義頭文件
1
2
3
4\#ifndef CIRCLE_H
\#define CIRCLE_H
//你的代碼寫在這里
\#endifCIRCLE_H這個名字實際上是無所謂的,命名為什么都行,只要符合規(guī)范都行。原則上來說,建議把它寫成這種形式,因為比較容易和頭文件的名字對應。
源文件(.cpp):主要寫實現(xiàn)頭文件中已經聲明的那些函數(shù)的具體代碼。需要注意的是,開頭必須#include一下實現(xiàn)的頭文件,以及要用到的頭文件。那么當你需要用到自己寫的頭文件中的類時,只需要#include進來就行了。工程中只能有一個main()函數(shù),是應用程序的入口。
雖說頭文件可以用來保存任意代碼片段,但典型的做法是只用它們來保存函數(shù)聲明、用戶自定義類型數(shù)據(結構和類)、模板和全局性的常量。
如果你有一個程序需要多次調用一個或一組函數(shù),或是你有一個或一組函數(shù)需要在多個程序里調用,就應該把它們的聲明拿出來放到一個頭文件里。
頭文件應該只包含最必要的代碼,比如只聲明一個類或只包含一組彼此相關的函數(shù)。把接口(函數(shù)的原型)和實現(xiàn)(函數(shù)體的定義)分開是對代碼進行模塊化的基本原則之一。
C++編程中遇到的一些問題
menset():char型初始化函數(shù)
- 所在頭文件<string.h>或 <memory.h>,有人通過測試,發(fā)現(xiàn)使用memset似乎不需要使用額外的頭文件。。
- 函數(shù)原型:void *memset(void *s , int ch , size_t n )
- 函數(shù)解釋:將s中的前n個字節(jié)用ch替換并且返回s。
函數(shù)作用:在一段內存塊中填充某一個給定的值,常用于較大的對結構體和數(shù)組的清零操作。
參考:C++中memset函數(shù)的用法一般用于清零。
在<float.h>中定義了浮點類型的范圍:
1
2#define DBL_MAX 1.7976931348623158e+308 /* max value */
#define DBL_MIN 2.2250738585072014e-308 /* min positive value */給C++的一維數(shù)組賦初值,只有在定義的時候可以整體初始化,
錯誤的賦值方法:1
2
3int *temp = new int[2];
temp[0] = arr1[0];
temp[1] = arr1[2];應該為:
1
2
3int temp[2];
temp[0] = arr1[0];
temp[1] = arr1[2];
對于new創(chuàng)建的數(shù)組,之間使用創(chuàng)建時的大小。new數(shù)組只能用無參的構造函數(shù)或者所有參數(shù)都有默認值的構造函數(shù)。
函數(shù)調用的三種參數(shù)傳遞方式:
(1)傳值調用:實參被拷貝了一份,然后在函數(shù)體內使用,函數(shù)體內修改參數(shù)變量時修改的只是實參的一份拷貝,而實參本身沒有改變,所以如果想要在調用的函數(shù)中修改實參的值,使用值傳遞不能達到其目的,這時只能使用引用或者指針傳遞。
(2)傳址調用(即是傳指針):傳遞的是一個地址值,如果改變被調函數(shù)中的指針地址,它將應用不到主調函數(shù)的相關變量。指針可以改變其指向的對象(指針變量中的值可以改)。
(3)傳引用:任何對于引用參數(shù)的處理都會通過一個間接尋址的方式操作到主調函數(shù)中的相關變量,引用對象不能修改。。
- C++中引用傳遞與指針傳遞的區(qū)別
- C語言中memset函數(shù)詳解
指針的使用:如果使用下面的方法對一個數(shù)組做初始化,double** q = Pxy;,此處直接使用Pxy構建一個二維數(shù)組,但是在此之后的語句,對數(shù)組q操作,Pxy的值也會相應地改變。
計算靜態(tài)數(shù)組的長度函數(shù)
1
2
3
4
5
6
7
8template<typename T>
int count(T& x)
{
int s1 = sizeof(x);
int s2 = sizeof(x[0]);
int result = s1 / s2;
return result;
}
對于動態(tài)數(shù)組,上面的函數(shù)不能得到二維數(shù)組的長度,sizeof(動態(tài)數(shù)組)結果是單個元素的大小,相當遠sizeof(x[0])。
隨機數(shù)的產生
(1) c語言中rand()函數(shù)的用法筆記:http://blog.csdn.net/chikey/article/details/66970397
(2)C++中rand()函數(shù)的用法,可根據這個來產生隨機數(shù)(3)示例,使用下面的語句,產生的是一個0-1的隨機數(shù),且精度為1/32767,rand() / (double)RAND_MAX;
C++動態(tài)內存分配:
delete[] mi;// 由于mi是靜態(tài)存儲分配,不需要手動釋放內存,如果加這兩句可能會陷入程序不運行的狀態(tài)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 使用new構建并初始化二維數(shù)組
float** create_array(int row, int col){
float** p = new float*[row];
for (int i = 0; i < row; ++i) {
p[i] = new float[col];
for (int j = 0; j < col; ++j) {
p[i][j] = 0;
}
}
return p;
}
// 初始化二維數(shù)組
template<typename T>
void init_array(T&& arr, int row, int col){
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
arr[i][j] = 0;
}
}
}
參考:(1)C++ 動態(tài)內存分配(6種情況,好幾個例子)(2)C++ 內存分配秘籍—new,malloc,GlobalAlloc詳解(分析詳細易懂)
調試
(1)數(shù)據類型與輸入或輸出的類型不匹配
fscanf_s(fp, "%lf,", &temp); //此處temp定義的是float類型,但是輸入確實double型
報錯如下:
Run-Time Check Failure #2 - Stack around the variable 'temp' was corrupted.將變量加入到字符數(shù)組中:
1 sprintf_s(t, "result/FJ_%d_%d_%d_%d.txt", FEATURE_NUM, FEATURE_SUB_NUM,1,5); 輸入字符串,轉化為數(shù)組,并統(tǒng)計字符個數(shù):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include<iostream>
#include<string>
using namespace std;
int main() {
// 輸入數(shù)據
string s1;
char temp;
while((temp=cin.get())!='\n') {
s1 +=temp;
}
const int LEN =s1.length();
char* s = new char[LEN];//根據輸入字符串的長度,創(chuàng)建字符數(shù)組
for(int i = 0;i<LEN;i++){ //將字符串保存到字符數(shù)組中
s[i]=s1[i];
}
cout<<LEN<<endl;
return 0;
}
總結
以上是生活随笔為你收集整理的C++初始编程及相关的问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 主动权益类基金是什么意思,也称为主动型基
- 下一篇: 生猪期货合约及规则