C語言運算符

1.三目運算符:

(表達式1)?(表達式2) : (表達式3);

表達式1 成立 ,返回表達式2 的值,否 ?返回3 的值

內存地址:(取地址符 &) ?打印 %P占位符 printf(“b%p”,&b)

switch (表達式)

case(常量)://case 里面不能直接定義變量

語句塊;

break;

default: 語句 n + 1;

# include

int main( )

{

void action1(int,int),action2(int,int);

char ch;

int a = 5,b = 23;

ch = getchar( );

switch (ch)

{

case‘a':

case‘A’: action1(a,b);break;

default: putchar(‘\a’) // 如果輸入其他字符,發出警告。

}

}

//內存地址,變量的首個字節的編號就是該變量的內存地址。

// scanf 函數 printf 函數 ?變量聲明 r如果下一次輸入時字符貨其他情況時,?“\n”scanf(“\n")

int oldPassWord ?= 123456;

printf(“輸入新密碼:\n”);

//定義一個新變量,存儲新的密碼

intnewPassWord;

scanf(“%d”,&newPassWord);

if (oldPassWord ==newPassWord)

{

執行語句塊;

}

2.靜態變量和動態變量

如果函數中的變量只被引用而不改變值,則定義為靜態局部變量(同時初始化),以免每次調用時重新賦值。

階乘運算 中 使用 靜態變量

# include

int main( )

{

int fac(int n);

for(int i = 1;i < 6;i++) printf(“%d! = %d\n”,i.fac(i));

return 0;

}

int fac(int n)

{

static int f = 1;// f 保留來上次調用結束時的值

f = f * i; ? ? ? ? ?// 在上次的f的值的基礎上再乘以n

return(f);// ? 返回值f是n! 的值

}

靜態變量存儲占用內存(長期占用不釋放),若非必要,不怎么使用。

3、寄存器變量(register)

一般情況下,變量(靜態和動態)的值存放于內存中的。當程序中用到哪一個變量的值時,由控制器發出指令將內存中該變量的值送到運算器中。經過運算器進行運算,如需要存數,再從運算器將數據送到內存存放。

如果變量使用頻繁,存儲變量的值花費時間較多。提高執行效率,允許將局部變量的值放在cpu中的寄存器中,需要時直接從寄存器取出參加運算,不必再到內存中去存儲。(寄存器的存儲速度遠高于內存)。這種變量叫:寄存器變量,用關鍵字register 作聲明:

register ?int f ;// 定義f為寄存器變量 。

注:三種局部變量的存儲位置是不同的:自動變量存儲于 動態存儲區 ;靜態局部變量 存于 靜態存儲區;寄存器存儲于cpu的寄存器中.

4、全局變量的存儲類別

一般而言,外部變量是在函數外部定義的的全局變量,其作用域從 定義處開始 到 本程序文件的末尾。在此作用域內,全局變量可以為各個函數所引用。but 希望能擴展外部變量的作用域時可以。

> 在一個文件內擴展外部變量的作用域。

如果外部變量的不在文件的開頭定義,其有效的作用范圍只限于定義處到文件結束。在定義點之前的函數不能引用該處變量。若需要,則應該在引用之前用關鍵字 extern 對該處變量作

“外部變量聲明”,表示把該處的作用域擴展到此位置。

eg:

# include

int main ( )

{

int max( );

extern int A,B,C; ?// 將外部變量擴展到從此處開始

printf(“three number?enter:”);

scanf(“%d %d %d”,&A,&B,&C);

printf(“Max is %d\n”,max);

return 0;

}

int A,B,C; ? // 定義外部變量;

int max( )

{

int m;

m = A > B ? A : B;

return (m);

}

> 將外部變量的作用域擴展到其他文件

一個c程序可由一個或多個源程序文件組成。此時,如果一個程序由多個文件組成。如,一個程序由兩個文件組成,在兩個文件中都需要用到另一個外部變量Num,不能分別在兩個文件中各自定義一個外部變量 Num ,否則在進行程序的連接時會出現“重復定義”的錯誤。 the right way is :在其中一個文件中定義外部變量,在另一文件中用extern 對 Num 作“外部變量聲明,即extern Num”.

文件file1.c

# include

int A;

int main ( )

{

int power(int);

int b = 3,c,d,m;

printf(“enter the number a and its power m:\n”);

scanf(“%d,%d”,&A,&m);

c = A * b;

d = power(m);

printf(“%d * %d = %d”,A,m,d);

return 0;

}

文件file2.c

extern A;

int power(int n)

{

int i,y = 1;

for (i = 1;i < = n;i++)

{

y *= A;

}

}

>將外部變量的作用域限制在本文件中

當不希望某些變量被其他文件引用,只限于在本文件引用。此時可以在定義外部變量時加一個  static 聲明。

file1.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?file2.c

static int A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?此時本文件不可使用

這種加上 static 聲明,只能用于本文件的外部變量 稱為 靜態外部變量。

用static 聲明一個變量的作用是:

(1)對局部變量用static 聲明,把它分配在靜態存儲區,該變量在整個程序執行期間不釋放,其所分配的空間始終存在。

(2)對全局變量用static 聲明,則該變量的作用域只限于本文件模塊(即聲明的文件中)

注: 不能先定義 后指定存儲類型。

********** 存儲類別小結******************

對一個數據的定義,需要指定兩種屬性:數據類型 ? 存儲類型,分別使用兩個關鍵字 ? static ?auto

static int a//靜態局部變量或者靜態外部整形變量

auto char c//自動變量 ,在函數內定義

register ?int d// 寄存器變量 ,在函數內定義

static 對局部變量和全局變量的作用不同。對局部變量來說,它使變量由 ? 動態存儲方式 ?變為 ?靜態存儲方式。對全局變量來說,它使變量局部化(局部于本文件),但仍為靜態存儲方式。

從作用域角度:凡由static 聲明的,其作用域都是有限的,或是局限于本函數內。

此外 ,可以用extern 聲明已經定義的外部變量,例如:

extern b; //將已經定義的外部變量 b 的作用域擴展至此。

內存中:靜態存儲區和動態存儲區 ?以及 CPU中的寄存器

一個函數一般由兩個部分構成: 聲明部分 和 執行部分。

聲明部分:對有關的標識符(變量、函數、結構體、共用體~)的屬性進行聲明。

eg:有一個字符串 ?內有若干個字符 ,先輸入一個字符,要求程序將字符串中該字符刪去。用外部函數實現。

:用一個字符數組 str 存放一個字符串,然后對str 數組中的字符逐個檢查,如果不是指定要刪除的字符則 保留,仍存放在數組中 ?,否 ,則 刪去。定義三個函數用來輸入字符串,刪除字符串,輸出字符串。按以上要求,將三個函數分別放在三個文件中,main函數在另一個函數中。

file1.c

# include

int main( )

{

extern void enter_string(char str[ ]);

extern void delete_string(char str[ ],char ch);

extern void print_string(char str[ ]);

//以上三個函數的聲明在本函數將要調用的已在其他文件中定義的3個函數;

char c ,str [80];

enter_string(str);

scanf(“%c”,&ch);

delete_string(str,ch);

print_string(str);

return 0;

}

file2.c

void enter_string(char str[80])

{

gets(str); ? //向字符數組輸入字符串

}

file3.c

void delete_string(char str[ ],char ch)

{

int i,j;

for(i = j = 0;str[i] !=‘\0’;i++)

{

if(str[i] != ch) str[j++] = str[i]; str[j] =‘\0’;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容