當前位置:首頁 » 編程語言 » c語言staticdouble
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言staticdouble

發布時間: 2022-09-27 08:35:49

c語言中const double什麼意思

const double a=1.0;

這種表示 a 是一個常量的double類型。

也就是 你這樣const double a=1.0; 以後。
不能令 a=2.0了,因為a是常量,不允許改變。

❷ C++中關於static

修改後的代碼如下:

#include<iostream>

#include<math.h>

usingnamespacestd;

double*matadd(double*a,double*b,intc)

{

staticdouble*p=newdouble[c];//定義動態數組p

double*head=p;//head指針指向p

if(c!=0)

{

p[0]=a[0]+b[0];

p++;

matadd(a+1,b+1,c-1);

}

returnhead;

}

intmain()

{

doublea[5]={1,2,3,4,5};

doubleb[5]={5,4,3,2,11};

double*p=matadd(a,b,5);

delete[]p;

double*p2=matadd(a,b,5);

for(inti=0;i<5;i++)

{

cout<<p2[i]<<endl;

}

return0;

}

運行效果:


static修改的變數為靜態變數,它是生命周期起源於程序預編譯期間,當所在程序結束後才會消失。而函數內的普通局部變數的生命周期起源於方法被調用,終止於方法調用結束。

static變數無論所處位置在哪,它的生命周期均是大於函數的。

"staticdouble*p"表示將p設置為靜態指針,指向動態數組,當嵌套調用matadd()方法時,p依然存在,即多次調用matadd()方法時出現的p指針變數實際上是同一個靜態指針變數。

「double*head=p」表示定義普通的指針變數head,它指向p,當matdata()方法被調用時,重新生成指針變數head,但每一次不同的head指針變數均指向同一個p(靜態指針變數)。

matdata()函數的作用是將指針a、b指向的數組的第一個元素相加,將相加的和存入p指向的數組中;然後移動a、b、p三個指針,繼續重復上一步的操作,趕到a、b指向的數組的元素全部相加為止。最後返回p指向的數組的首地址。

❸ 問一下C語言的static類型,

哥喜歡俗的。
簡單來說,static可以修飾三種東西,全局變數,局部變數和函數。
如果修飾的是全局變數和函數,作用類似都是使得被修飾的全局變數和函數只能在本文件內被訪問或者調用。
如果修飾的是局部變數,則該局部變數的作用和一個全局變數差不多,只是只能在所在的函數內使用。
總之,static可以用來限制變數和函數的范圍,防止其它的文件里有同名的變數或者函數導致沖突。

你列舉的代碼中,main()函數用static修飾數組就是屬於修飾局部變數的方式。如上面所說,局部變數用static修飾後,性質類似全局變數,值在下一次再進入這個函數的時候值仍保持上一次的值,和全局變數不同的只是,該局部變數只能在該函數內可見。

❹ 請問C語言中double stick(double ar[static 20]);什麼意思

一般這個形式的表示法是在數組做參數的函數聲明時候表示,例如:int fact( int st[],int n){} 表示一個數組名 當然當你學習指針學的深了以後會知道,上面的函數等同於:int fact(int* st,int n){} 數組做參數的時候,只需要傳入首地址的指針

❺ 計算機C語言中的關鍵字:double是什麼意思

double:表示雙精度字型。

C語言中的關鍵字:
auto :聲明自動變數
break:跳出當前循環
case:開關語句分支
char :聲明字元型變數或函數返回值類型
const :聲明只讀變數
continue:結束當前循環,開始下一輪循環
default:開關語句中的「其它」分支
do :循環語句的循環體
double :聲明雙精度浮點型變數或函數返回值類型
else :條件語句否定分支(與 if 連用)
enum :聲明枚舉類型
extern:聲明變數或函數是在其它文件或本文件的其他位置定義
float:聲明浮點型變數或函數返回值類型
for:一種循環語句
goto:無條件跳轉語句
if:條件語句
int: 聲明整型變數或函數
long :聲明長整型變數或函數返回值類型
register:聲明寄存器變數
return :子程序返回語句(可以帶參數,也可不帶參數)
short :聲明短整型變數或函數
signed:聲明有符號類型變數或函數
sizeof:計算數據類型或變數長度(即所佔位元組數)
static :聲明靜態變數
struct:聲明結構體類型
switch :用於開關語句
typedef:用以給數據類型取別名
unsigned:聲明無符號類型變數或函數
union:聲明共用體類型
void :聲明函數無返回值或無參數,聲明無類型指針
volatile:說明變數在程序執行中可被隱含地改變
while :循環語句的循環條件

C語言中有三種循環格式:for(),while(),do..while();
1、while循環格式為:
while( e ) {
while_statements ;
}
其意義為:先檢查循環條件e是否為真,如果e為真,則執行循環體中的 while_statements ;語句,否則,結束while循環。 可以看出,當e第一次就是假時,while的循環次數會是0次,即:這種寫法,最小執行次數為0.
2、do..while循環格式為:
do {
do_while_statements ;
} while( e ); //注意這里的分號不能少!
其意義為:先執行循環體中的do_while_statements ;語句,然後再判斷e是否為假,如果為假則結束while循環,如果為真,則繼續循環。可以看出,當e第一次就是假時,do_while的循環次數會是1次,即:這種寫法,最小執行次數為1. 或稱至少執行一次。

❻ C# 有一個方法 static double minu(double a, double b),返回值為c。。。如何使用該方法

首先你沒有說 你的方法寫在哪裡不是一個類的話就是
textbox3.text=類名稱.方法名.tostring();
如果在同一類中直接調用

❼ c語言中double如何轉換成float類型

double 轉換成float, 如果數值沒有超界,例子如下:

void main()
{
double a=123.4L;
float b;
b = (float) a;
printf("%f",b);
}

如果數值范圍超界,則不應轉換。

❽ C語言中double類型怎麼使用

使用printf時,它們具有相同的格式說明符,但使用scanf時,它們沒有相同的格式說明符。

為什麼是這樣?因為printf的參數被提升,而scanf的參數(作為指針)卻不被提升。

這種論點提升到底是什麼?當較小尺寸的參數(特別是char,short和float)傳遞給可變參數函數(如printf之類的函數,其參數數量不固定)時,它們將轉換為較大尺寸。Char和short轉換為int,float轉換為double。

為什麼這樣 據我所知,純粹出於歷史原因。C的設計師認為這是個好主意,因為這些轉換基本上是免費的,因為所有類型的尺寸都足夠小,可以放入單個寄存器或堆棧中的單個「單元」(將內容壓入堆棧必須與某些位元組邊界對齊,例如,堆棧上的每個項目都必須以4的倍數的地址開頭。同樣,顯然,這種轉換減少了傳遞參數時的錯誤。

因此,當您向printf傳遞float類型的參數時,實際上它會在轉換為printf之前就轉換為double類型。我們可以使用調試器證明這一點。我寫了下面的C代碼:

主要功能編譯成:

領取關於C/C++更多學習資料:

我在調用printf之前(在地址0x63b處)放了一個斷點。根據Linux x86_64調用約定,浮點參數在XMM寄存器中傳遞(CPU中特殊的小內存位置,可用於對多條數據並行執行同一條指令,但實際上可用於大多數事情) 。因此,我查看了第一個XMM寄存器xmm0,然後:

xmm0中的值之一,當解釋為雙精度值時,是1,恰好是我們傳遞給printf的值。同時,當將該寄存器中的值解釋為浮點數時,它們是這樣(巧合的是,我們得到1.875)。因此,轉換確實發生了。這就解釋了為什麼對於printf,我們在浮點數和雙精度參數中都使用%f -浮點數無論如何都會轉換為雙精度,因此printf不能分辨出兩者之間的區別。

同時,scanf的參數是指針,因此不受此轉換的限制。其原因是因為所有指針類型僅包含內存地址,並且所有內存地址都具有相同的大小(在我的64位計算機上為64位)。因此,當scanf在其格式字元串中獲得%f時,它將期望一個float *類型的指針,而當它獲得%lf時,將期望得到double *類型的指針。如果格式說明符和指針的類型不匹配,則會產生一些有趣的結果。

由於float的大小為4個位元組,而double的大小為8個位元組(至少在我的機器上),因此當我們寫入float *類型的指針所指向的位置時,我們將覆蓋4個位元組的內存。同時,如果我們寫入由雙*指向的位置,則將覆蓋8個位元組的內存。考慮以下代碼:

printf說明符上的.15標志只是使printf精確度更高。由於我們使用的是雙精度值(並且正如我剛剛說的那樣,%f也適用於printf的雙精度值),因此我們實際上可以訪問具有這種精度的數字(只要它們不是太大而不能填充即可。我實際上不是對浮點表示非常了解)

編譯並運行後,結果如下:

如您所見,如果我們忽略所有類型的fuckery,則數字應該匹配,但它們甚至不相近。這是為什麼?

好吧,我們給scanf%f說明符,所以它期望一個浮點數*。但是我們傳遞了一個雙*。現在,這些指針的實際值都只是地址-scanf不知道它們之間的區別。它進行了下去,讀取我們輸入的值,並將其存儲為float 。但是浮點數僅佔用4個位元組,因此scanf只會在我們可用的double變數的8個位元組中寫入4個位元組。在我的情況下,由於我的機器是低位位元組序的,因此似乎對應於double變數的細粒度(小有效位)數字的第4個位元組將被覆蓋。因此,當我們列印出double double back時,我們得到的數字幾乎與以前相同,但最低有效數字有所變化。

有想學習更多C/C++知識的,可以點擊下方了解更多,領取免費學習資料: