1. 程式人生 > >memset函式初始化和最短路中的最大值

memset函式初始化和最短路中的最大值

在最短路中最大值:

最好把最大值設定為0x3f3f3f3f,而非0x7fffffff 理由如下。

#include<stdio.h>  
#include<string.h>  
#define MAX1 0x7fffffff  
#define MAX2 0x3f3f3f3f  
int a[3];  
int main()  
{  
    memset(a,0x3f,sizeof(a));  
    printf("%d\n",MAX1);  
    printf("%d\n",MAX1*2);  
    printf("%d\n",MAX2);  
    printf("%d\n",MAX2*2);  
    for(int i=0;i<3;i++)  
    printf("%d ",a[i]);  
    printf("\n");  
    return 0;  
}  

0x7fffffff +0x7fffffff 會等於負數,if (d[u]+w[u][v]<d[v])就會出錯。

memset函式初始化:

因為memset是以位元組為單位,初始化記憶體塊。

  1. memset(mp,0,sizeof mp):  使mp數組裡的所有值變為0x00000000 ,而0x00000000 = 0,所以mp數組裡的所有值就變為了0。
  2. memset(mp,0x3f3f3f3f,sizeof mp):0x3f3f3f3f = 1061109567 為10^9。 而且使用這個數字直接用memset函式就行了,不用迴圈初始化陣列,不然真的很煩。
  3. memset(mp,-1,sizeof mp):會使mp中每個元素的值為-1的原因如下:
    int型別的整數-1在32位的計算機中表示為 11111111    11111111   11111111   11111111
    memset將void *memset(void *s, int ch, size_t n)中的ch強制轉換為unsigned char,
    也就是變成11111111
    最終執行完memset函式後,temp對應的記憶體每一位元組都被賦值為11111111
    也就是說temp的任意一個元素都為11111111    11111111   11111111   11111111
    恰好為-1。
  4. memset(mp,1,sizeof mp):  變數被初始化成了0x01010101 = 16843009 , 而非1。 所以並不能用。
以上分別轉載至: http://blog.csdn.net/mylovestart/article/details/8238088


http://blog.sina.com.cn/s/blog_714dacd10101kgtk.html


http://blog.csdn.net/my_business/article/details/40537653
ps:並沒有經過同意。安靜

相關推薦

memset函式初始短路

在最短路中最大值: 最好把最大值設定為0x3f3f3f3f,而非0x7fffffff 理由如下。 #include<stdio.h> #include<string.h>

C++二維動態陣列memset()函式初始

先說說memset函式: void *memset(void *s,int c,size_t n)作用:將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。 memset()的內涵:用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化為‘ ’

memset()函式初始問題

以上程式碼執行後,dp陣列的內容為 00000001 00000001 00000001 00000001 轉化為十進位制後不為1  我們在很多程式中都會看到memset(a,127,sizeof(a));這樣的程式碼,127是什麼特別的數字呢?通過基礎的進位制轉換可以得知127的二進位制表示是0111111

C語言函式指標陣列的初始使用

不比多說上一個程式碼,就懂了! 程式碼一: #include <stdio.h> int func(int i) {     printf("%d\n",i);     return i*i; } int

C++預設建構函式建構函式初始列表

1、預設建構函式和建構函式 (1)建構函式:C++用於構建類的新物件時需要呼叫的函式,該函式無返回型別!(注意:是“無”! 不是空!(void))。 (2)預設建構函式:預設建構函式是在呼叫時不需要顯示地傳入實參的建構函式。 一個類如果自己沒有定義建構函式,則會有一個無參且函式體也是空的

c++初始列表建構函式初始

初始化和賦值對內建型別的成員沒有什麼的的區別,在成員初始化列表和建構函式體內進行,在效能和結果上都是一樣的。對非內建型別成員變數,因為類型別的資料成員的資料成員物件在進入函式體前已經構造完成,也就是說在成員初始化列表處進行構造物件的工作,呼叫建構函式,在進入函式體之後,進行的是對已經構造好的類物件的賦值,又呼

C++類使用建構函式初始類表建構函式函式的區別

參考:http://www.360doc.com/content/13/0607/19/1317564_291331713.shtml C++ Primer中在講建構函式初始化列表的時候有這麼一段話:  無論是在建構函式初始化列表中初始化成員,還是在建構函式體中對它們賦

C++ 模板類的static變數函式 初始

關鍵詞: C++ 模板 static 變數 函式  初始化 這篇文章主要介紹關於模板類中如果有static變數如何初始化問題。 重要:如果不初始化static變數,那麼編譯可能沒有問題,但是程式有問題,可能編譯有問題,但是不能確定是初始化問題。 #include"ios

深度學習的Xavier初始He Initialization(MSRA初始)、Tensorflow如何選擇合適的初始方法?

Xavier初始化: 論文:Understanding the difficulty of training deep feedforward neural networks 論文地址:http://proceedings.mlr.press/v9/glorot10a/glorot10a

spring ioc---定製bean初始銷燬時的回撥函式

約莫有4種方式定製bean初始化和銷燬時的回撥函式,如下表格. 方式 說明 使用beans標籤的屬性 beans標籤中,使用以下兩個屬性, `default-init-method`和`default-destroy-m

C++初始預設初始

1、值初始化       顧名思義,就是用數值初始化變數。如果沒有給定一個初始值,就會根據變數或類物件的型別提供一個初始值。對於int型別其值初始化後的值為0。 2、預設初始化:如果定義變數時沒有指定初值,則變數被預設初始化。其初始值和變數的型別以及變數定義的位

C++建構函式初始列表與建構函式的賦的區別

C++類中成員變數的初始化有兩種方式:          建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。          成員變數初始化的順序是按照在那種定義的順序。 1、內部資料型別(char,int……指標等) class Animal { publ

一個長度為N的陣列包含正數 負數 0,請實現一個函式找出為0的長子數列

<strong><span style="font-size:18px;">// #include<iostream> #include<vector>

java類的初始物件的例項區別

在程式RUN的一瞬間,什麼類啊,靜態的東西啊(靜態塊,靜態方法,靜態屬性),刷刷刷的就在記憶體中載入(你可以看作初始化)了,只加載一次,然後main方法開始執行(這就是為什麼main方法必須是靜態的原

c++set的使用:初始去重、排序

1.set的初始化可以直接用迭代器,set的定義和初始化方式包括: set<T> s;set<T> s(s1);set<T> s(b, e); 其中,b和e分別為迭代器的開始和結束的標記。 例如: #include <stdi

Java陣列表示1(一維陣列的定義、初始記憶體陣列的表示)

各個語言中都有陣列,但Java中是有區別的,Java中只有一維陣列,沒有多維陣列,多維陣列使用陣列的陣列來表示的。所以下面介紹的陣列主要以一維陣列來表示。 1.陣列的定義 陣列型別也是一種型別,本身是一種引用型別,例如int是一個基本資料型別,但是int[]就是一種引用資

c++建構函式初始的方法以及主要區別

一、我的問題是關於初始化C++類成員的。我見過許多這樣的程式碼: CSomeClass::CSomeClass() { x=0; y=1; } 而在別的什麼地方則寫成下面的樣子: CSomeClass::CSomeClass() : x(0), y(1) { } 我的一些程式設計師朋友說第

C語言指標初始常規運算

1. 指標初始化注意須知 <1>指標變數和普通變數一樣,外部或者靜態指標變數若未初始化,則被自動初始化為NULL,它的值為0(ASCII字元NULL的程式碼)。 <2>可以

Linux驅動開發(三)——模組初始解除安裝函式

        在(一)中,主要講述了模組的基本組成,載入,解除安裝和檢視工具的使用。本篇中,主要講述module_init()和module_exit()這兩個函式的使用。          在(一)中給的原始碼檔案中,模組初始化和解除安裝函式為:init_module()

共享庫的初始~初始函式分析

Win32下可以通過DllMain來初始化和~初始化動態庫,而Linux下則沒有與之完全對應的函式,但可以通過一些方法模擬它的部分功能。有人會說,很簡單,實現_init/_fini兩個函式就行了。好,我們來看看事實是不是這樣的。 很多資料上都說可以利用_init/_fini來實現,而我從來沒有測試成功