久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

c語言中可變參數函數設計方案(推薦閱讀)

時間:2019-05-12 21:03:40下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《c語言中可變參數函數設計方案》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《c語言中可變參數函數設計方案》。

第一篇:c語言中可變參數函數設計方案

c語言中可變參數函數的設計

c語言中可變參數函數的設計

c語言中可變參數函數的設計

-----最近想好好學學這個, 先把網上搜集得資料貼上.========================

參數可變函數的實現(上)CSDN Blog推出文章指數概念,文章指數是對Blog文章綜合評分后推算出的,綜合評分項分別是該文章的點擊量,回復次數,被網摘收錄數量,文章長度和文章類型;滿分100,每月更新一次。

此文獻給如我一般還在探索C語言之路的朋友們。

注:本文中測試程序的編譯環境為win2000和VC6.0 緣起:

作為一個程序員,我沒有寫過參數可變的函數,我相信大部分朋友也沒有涉及過,或者我的境界層次太低了。那么緣何我要去揭這一層面紗呢?因為好奇!

我是個思維具有極大惰性的人,曾經識得參數可變函數,也懶得去深究,但是它的三點(函數聲明時參數列表中的“…”)卻深刻的映入/ 20 了我的記憶里,而且是帶著若干個閃耀的問號。可是就在昨天,在拜讀某君的高論時,它再一次出現了。我的資質真的是不太夠,因為某君在談到它時只是給出了中關于它的宏定義,我想大概在高手眼里,點這一下就神會了吧。可是他這么輕輕一點卻使留在記憶里曾經的那幾個問號無限的膨脹,以至于我這個又菜又懶的所謂程序員也萌生了莫大的好奇。

破題:

但凡所謂“實現”都是從沒有到有的過程,但是我只是想去解惑它的實現,因為它原本就是好端端的正為成千上萬的程序員們服務。

還是從我們熟悉的printf說起:

如果你是個C語言的程序員,無論你是初學者還是高高手,對于printf都不會陌生,甚至你已經用了無數次了。我已經說過我是個有極大惰性的人,所以每次用printf都是照本宣科,規規矩矩的按教科書上說的做,從來沒有問過一個為什么,這就是所謂的“熟視無睹”吧。

其實,printf函數是一個典型的參數可變的函數。在保證它的第一個參數是字符串的條件下,你可以輸任意數量任意合法類型的參數。只要你在第一個字符串參數中使用了對應的格式化字符串,你就可以輸出正確的值。這難道不是件很有趣的事嗎?那它是怎么做到的?

1,首先,怎么得到參數的值。對于一般的函數,我們可以通過參數對應在參數列表里的標識符來得到。但是參數可變函數那些可變的參數是沒有參數標識符的,它只有“…”,所以通過標識符來得到是不可能的,我們只有另辟途徑。/ 20

我們知道函數調用時都會分配棧空間,而函數調用機制中的棧結構如下圖所示:

|......|

------------------

| 參數2 |

------------------

| 參數1 |

------------------

| 返回地址 |

------------------

|調用函數運行狀態|

------------------

可見,參數是連續存儲在棧里面的,那么也就是說,我們只要得到可變參數的前一個參數的地址,就可以通過指針訪問到那些可變參數。但是怎么樣得到可變參數的前一個參數的地址呢?不知道你注意到沒有,參數可變函數在可變參數之前必有一個參數是固定的,并使用標識符,而且通常被聲明為char*類型,printf函數也不例外。這樣的話,我們就可以通過這個參數對應的標識符來得到地址,從而訪問其他參數變得可能。我們可以寫一個測試程序來試一下: / 20

#include

void va_test(char* fmt,...);//參數可變的函數聲明

void main(){

int a=1,c=55;

char b='b';

va_test(“",a,b,c);//用四個參數做測試

}

void va_test(char* fmt,...)//參數可變的函數定義,注意第一個參數為char* fmt {

char *p=NULL;/ 20

p=(char *)&fmt;//注意不是指向fmt,而是指向&fmt,并且強制轉化為char *,以便一個一個字節訪問

for(int i = 0;i<16;i++)//16是通過計算的值(參數個數*4個字節),只是為了測試,暫且將就一下

{

printf(”%.4d “,*p);//輸出p指針指向地址的值

p++;} }

編譯運行的結果為

0056 0000 0066 0000 | 0001 0000 0000 0000 | 0098 0000 0000 0000 | 0055 0000 0000 0000

由運行結果可見,通過這樣方式可以逐一獲得可變參數的值。

至于為什么通常被聲明為char*類型,我們慢慢看來。

2,怎樣確定參數類型和數量 / 20

通過上述的方式,我們首先解決了取得可變參數值的問題,但是對于一個參數,值很重要,其類型同樣舉足輕重,而對于一個函數來講參數個數也非常重要,否則就會產生了一系列的麻煩來。通過訪問存儲參數的棧空間,我們并不能得到關于類型的任何信息和參數個數的任何信息。我想你應該想到了——使用char *參數。Printf函數就是這樣實現的,它把后面的可變參數類型都放到了char *指向的字符數組里,并通過%來標識以便與其它的字符相區別,從而確定了參數類型也確定了參數個數。其實,用何種方式來到達這樣的效果取決于函數的實現。比如說,定義一個函數,預知它的可變參數類型都是int,那么固定參數完全可以用int類型來替換char*類型,因為只要得到參數個數就可以了。

3,言歸正傳

我想到了這里,大概的輪廓已經呈現出來了。本來想就此作罷的(我的惰性使然),但是一想到如果不具實用性便可能是一堆廢物,枉費我打了這么些字,決定還是繼續下去。

我是比較抵制用那些不明所以的宏定義的,所以在上面的闡述里一點都沒有涉及定義在的va(variable-argument)宏。事實上,當時讓我產生極大疑惑和好奇的正是這幾個宏定義。但是現在我們不得不要去和這些宏定義打打交道,畢竟我們在討生計的時候還得用上他們,這也是我曰之為“言歸正傳”的理由。

好了,我們來看一下那些宏定義。

打開文件,找一下va_*的宏定義,發現不單單只有一組,但是在各組定義前都會有宏編譯。宏編譯指示的是不同硬件平臺和編譯器下用怎樣的va宏定義。比較一下,不同之處主要在偏移量的計算上。我們還是拿個典型又熟悉的——X86的相關宏定義: / 20

1)typedef char * va_list;

2)#define _INTSIZEOF(n)((sizeof(n)+ sizeof(int)1))

3)#define va_start(ap,v)(ap =(va_list)&v + _INTSIZEOF(v))

4)#define va_arg(ap,t)(*(t *)((ap += _INTSIZEOF(t))sizeof(type)))

其中,argp的類型是char *。

如果你想用va_arg從可變參數列表中提取出函數指針類型的參數,例如

int(*)(),則va_arg(argp, int(*)())被擴展為:

(*(int(*)()*)(((argp)+= sizeof(int(*)()))-sizeof(int(*)())))

顯然,(int(*)()*)是無意義的。

解決這個問題的辦法是將函數指針用typedef定義成一個獨立的數據類型,例如:

typedef int(*funcptr)(); / 20

這時候再調用va_arg(argp, funcptr)將被擴展為:

(*(funcptr *)(((argp)+= sizeof(funcptr))-sizeof(funcptr)))

這樣就可以通過編譯檢查了。

問題:可變長參數的獲取

有這樣一個具有可變長參數的函數,其中有下列代碼用來獲取類型為float的實參:

va_arg(argp, float);

這樣做可以嗎?

答案與分析:

不可以。在可變長參數中,應用的是”加寬“原則。也就是float類型被擴展成double;char, short被擴展成int。因此,如果你要去可變長參數列表中原來為float類型的參數,需要用va_arg(argp, double)。對char和short類型的則用va_arg(argp, int)。

問題:定義可變長參數的一個限制

為什么我的編譯器不允許我定義如下的函數,也就是可變長參數,但是沒有任何的固定參數?

int f(...)

{ / 20

...}

答案與分析:

不可以。這是ANSI C 所要求的,你至少得定義一個固定參數。

這個參數將被傳遞給va_start(),然后用va_arg()和va_end()來確定所有實際調用時可變長參數的類型和值。

第一篇

C語言編程中有時會遇到一些參數個數可變的函數,例如printf()函數,其函數原型為:

int printf(const char* format,...);

它除了有一個參數format固定以外,后面跟的參數的個數和類型是可變的(用三個點“…”做參數占位符),實際調用時可以有以下的形式:

printf(”%d“,i);printf(”%s“,s);printf(”the number is %d ,string is:%s“, i, s);

一個簡單的可變參數的C函數

先看例子程序。該函數至少有一個整數參數,其后占位符…,表示后面參數的個數不定。在這個例子里,所有的輸入參數必須都是整/ 20 數,函數的功能只是打印所有參數的值。函數代碼如下:

//示例代碼1:可變參數函數的使用 #include ”stdio.h“ #include ”stdarg.h“ void simple_va_fun(int start,...){ va_list arg_ptr;int nArgValue =start;int nArgCout=”0“;//可變參數的數目

va_start(arg_ptr,start);//以固定參數的地址為起點確定變參的內存起始地址。do { ++nArgCout;printf(”the %d th arg: %d",nArgCout,nArgValue);//輸出各參數的值

nArgValue = va_arg(arg_ptr,int);//得到下一個可變參數的值

} while(nArgValue!=-1);return;} int main(int argc, char* argv[]){ simple_va_fun(100,-1);simple_va_fun(100,200,-1);return 0;}

下面解釋一下這些代碼。從這個函數的實現可以看到,我們使用可變參數應該有以下步驟: / 20

⑴由于在程序中將用到以下這些宏: void va_start(va_list arg_ptr, prev_param);type va_arg(va_list arg_ptr, type);void va_end(va_list arg_ptr);va / 20

第二篇:C語言中的輸入輸出函數總結

putchar():把變量中的一個字符常量輸出到顯示器屏幕上;getchar();從鍵盤上輸入一個字符常量,此常量就是該函數的值;printf();把鍵盤中的各類數據,加以格式控制輸出到顯示器屏幕上;scanf();從鍵盤上輸入各類數據,并存放到程序變量中;puts():把數組變量中的一個字符串常量輸出到顯示器屏幕上;gets():從鍵盤上輸入一個字符串常量并放到程序的數組中.sscanf();從一個字符串中提取各類數據。putchar()輸出一個字符

getchar()輸入流中獲取一個字符 例如:

char c = getchar();putchar(c);格式化輸入輸出scanf()和printf()是最有用的,所以重點講一下。printf(): 一般形式: printf(“格式控制”.輸出列表);eg : printf(“a=%d,b=%f,c=%cn”,a,b,c);1;格式控制.格式控制是用雙引號括起來的字符串,也稱“轉換控制字符串”,它包含以下兩部分信息.格式說明:由“%”和格式字符組成,如%d,%f,%c,他的作用是把輸出數據轉換為指定格式輸出,格式的說明總是由“%”字符開始的.普通字符:需要原樣輸出的字符,或者是一些有特殊含義的字符,如n,t。2;輸出列表

就是需要輸出的一些數據,也可以是表達式,如果在函數中需要輸出多個變量或表達式,則要用逗號隔開.一些特殊字符的輸出:

單引號,雙引號,和反斜杠的輸出在前面加轉義字符”” 如:”’” , “”” , “”

%的輸出用兩個連在一起的%%,即printf(“%%”);

常用的格式說明如下: 格式字符

d 以十進制形式輸出帶符號整數(正數不輸出符號)o 以八進制形式輸出無符號整數(不輸出前綴O)x 以十六進制形式輸出無符號整數(不輸出前綴OX)u 以十進制形式輸出無符號整數 f 以小數形式輸出單精度實數 lf 以小數形式輸出雙精度實數

e 以指數形式輸出單、雙精度實數

g 以%f%e中較短的輸出寬度輸出單、雙精度實數 c 輸出單個字符 s 輸出字符串

這里強調一下:網上很多文章都說f 和lf是一樣的,即不管單精度,雙精度浮點數,都可以用f, 但我在POJ上做過測試,輸出Double時用f確實也可以,但讀入時,用f就報WA,所以大家如果對Double進行讀寫的話,都用lf吧。

說到Double,再啰嗦一句,建議大家要用到浮點數時都用Double,不要用float,因為在很多情況下,float精度不夠會導致WA。

特殊:

對64位整數的輸入輸出,在POJ上的C++環境下(即VC),64位整數是: __int64(注意int前面是兩個下劃線)輸入輸出格式為”%I64d”.在G++環境下(即Dev C++)64位整數是 long long 輸入輸出格式為”%lld”.輸出寬度

用十進制整數來表示輸出的最少位數。注意若實際位數多于定義的寬度,則按實際位數輸出,若實際位數少于定義的寬度則補以空格或0。

精度

精度格式符以“.”開頭,后跟十進制整數。意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。

標志格式字符

-結果左對齊,右邊填空格

+ 輸出符號(正號或負號)空格輸出值為正時冠以空格,為負時冠以負號 例如:

double c=24212345.24232;printf(“%020.4”);表示輸出精確到小數點后4位,輸出占20位,若有空余的位補0.scanf:

scanf的很多用法都是和printf對應的,故不再贅述。

說一下scanf一個特別好用的地方,就是可以濾去一些不想要的東西。舉例說明如下:

比如輸入為日期 yyyy-mm-dd,就可以這樣寫: int year,moth,day;scanf(“%d-%d-%d”,&year,&moth,&day);再比如:

scanf(“%3d %*3d %2d”,&m,&n);輸入113 118 69回車(系統將113賦予m,將69賦予n,因為*號表示跳過它相應的數據所以118不賦予任何變量)puts()用的不多,且基本都能用printf()代替,故不再多說。gets()是從輸入流中獲取一行字符串放入字符數組中: char in[100];gets(in);大家可能最容易出錯的地方就是字符串的輸入,所以強調一下: 能進行字符,字符串輸入的有:

getchar(), scanf(“%c”);scanf(“%s”), gets()

其中getchar()和 scanf(“%c”)的功能是一樣的。

需要注意的是,這兩個函數讀入的是輸入流中當前位置的字符,比如:

scanf(“%d”,&n);c = getchar();假設輸入 67/(假設“/”代表回車),則第一個scanf讀入一個整數67后,當前輸入流的位置是67之后,即指向回車符,所以第二個getchar()讀入的就是一個回車符了,即 c = ‘n’。

同樣,gets()也是從當前位置讀入一行字符串。比如:

scanf(“%d”,&n);gets(str);此時讀入字符數組中的字符串就是“n” 了

所以通常在用scanf讀入一個非字符串的類型之后,如果要讀入字符,或字符數組,都用一個額外的getchar()把回車符讀掉,若后面跟的不止一個回車符,可能還有多余的空格的話,就用gets()讀掉。

和以上不同的是,scanf(“%s”)讀入的時候是會忽略掉空格,回車和制表符的。并且以空格,回車和制表符作為字符串結束的標志。

經常會有這樣的題,輸入第一行是一個整數,接下來每行的第一個是一個字符,用來表示某種操作,后面再跟一些數據,比如: 4 A 100 2 B 23 A 23 89 B 34

像這種輸入就需要小心,讀入字符時不要讀成回車符。為了防止意外,我一般是這樣處理這類輸入的: char model[2];Scanf(“%d”,&n);for(?,?,?){

scanf(“%s”,model);

if(model[0] == ‘A’){ } else{ } } sscanf(): sscanf()經常用來分解字符串,功能非常強大,但很多功能都需要正則表達式的知識,所以就介紹一下最簡單的幾種用法,大家如果想了解更多的話,自己去網上找吧。1.char str[100],str1[100],str2[100];gets(str);sscanf(str,”%s%s”,str1,str2);

將讀入的一整行字符串按空格,制表符或回車符分割成兩個字符串。2 取指定長度的字符串。如在下例中,取最大長度為4字節的字符串。

sscanf(“123456 ”, “%4s”, str);

對于C++的輸入輸出就不再詳細的講了,因為cin,cout的速度實在太慢,不推薦使用,我一般都是到萬不得已時才用。

比如當你要讀入字符串到string 對象中時,就只能用cin了,這時候還有一個常見的問題,就是如何將一整行字符串讀入一個string 中,這就要用到getline函數了。用法為: getline(cin, str);第一個參數就是標準輸入流cin,第二個參數是接收讀入數據的string對象,本來還有第三個參數,是結束符的標志,但通常用它默認的就可以了,所以不用管。

注意區分這個getline和cin.getline的區別: cin.getline的用法如下: char str[20];cin.getline(str,20);表示從讀入的一行字符串中,取最多20各字符放入字符數組str中,注意此處的str是字符數組,而上面的str是string對象。

另外需要注意的是,千萬不要把cout和printf混用,因為cout是帶緩沖的而printf不帶,所以會使得輸出的數據順序混亂。

第三篇:對于C語言中的scanf函數的使用問題總結

Scanf函數總結

對于C語言中的scanf函數的小結

對于scanf函數的作用大家應該都知道吧。在任何一本C語言的教材中都有過介紹,它的一般形式是(格式控制,地址表列)

我今天想說說使用這個scanf函數的時候,應該注意哪些問題吧。

1.scanf函數中的格式控制應該是變量名的地址,而不是變量名,例如a和b為整形變量,如果寫成scanf(“%d%d”,a,b);就會出錯的,應該將這個,a,b改成&a,&b;(表示地址)2我們都知道C語言中的字符串是存放到字符數組中的,如果我們定義了一個字符數組,如char a[20];我們想把字符串輸入到這個字符數組中通常有兩種方式,第一種.逐個字符輸入,采用for循環的形式。第二種,直接輸入字符串的形式,用格式控制符%s.第一種我們這樣輸入,for(i=0;i<=19;i++){ } 第二種我們用這種方式輸入 Scanf(“%s”,a);注意第二種這種形式,我們沒有加&,這是為什么呢,這是 Scanf(“%c”,&a[i]);

Scanf函數總結

因為,C語言中把這個數組名當做該數組的起始地址。但是這種數組僅限于字符數組,不要企圖,利用數值型數組的名。來整體輸入,一個數值型的數組,這就是大錯誤了,比如這樣寫是不正確的 Int a[10];Scanf(“%d”,a);數值型數組的輸入只能采用上面的第一種方法。3對于指針問題,大家需要注意一點,指針就是地址,這是在任何條件下都成立的,(請允許我極端一點),比方看下面的例子。Char *p;Char a[20];P=a;For(i=0;i<20;i++,p++){ } 這是一個采用指針變量輸入數據的例子,這里的指針變量p在for循環之前就指向了這個數組a,也就是指向了數組的首元素,也就是是說指針變量p里存放的是,數組首元素的地址,所以在用這個scanf函數進行輸出時,指針變量的前方就不用再加取地址符號了。Scanf(“%c”,p);

Scanf函數總結

4.這個問題是整個scanf函數使用過程中最容易出錯的一個地方。就是關于用scanf函數在用“%c”格式聲明輸入字符的時候,是最容易出錯的一個地方。一點一點進行,下面請看一個簡單的例子: 看下面的一個程序,(1)

#include int main(){

} 我們想要輸入三個整數,輸入的時候我們要注意了,這里的scanf函數中的格式控制是三個連續的%d,除了格式聲明以外中間沒有任何其他的字符,這個時候我們輸入數據應該加入空格,否則執行不了。1 2 3(1,2之間有空格,2,3之間有空格,(具體原因會在例題2中闡明)加入其他符號也是不可以的)

(2)經過第一道的例題,似乎讓我明白了這樣的一個規律,如果中間都是除了格式聲明以外中間沒有任何其他的字符,int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d%d%dn”,a,b,c);return 0;

Scanf函數總結

那我就可以用空格,來隔開我的數據了。看看下面的例題 #include int main(){

} 我的輸入還是仿照上面,進行截圖如下所示 char a,b,c;scanf(“%c%c%c”,&a,&b,&c);printf(“%c%c%cn”,a,b,c);return 0;

我們發現輸出并不是我們想象的那樣,而是出現了錯誤,下面我們來解釋一下原因,因為我們原來輸入的位數值型的數據,所以我們要區分數值的個數,以及位數,比方我想輸入

Scanf函數總結 234 456這三個數,我要是連續的把這8個數輸入進去,計算機也無法區分,這到底是幾個數,所以我們用空格加以區分,這樣計算機遇到空格就知道這個數值型的數已經輸入完畢了(這是例題1中我們為什么加空格的原因),但是為什么在例題2中我還是這樣做,就不可以了呢,這是因為我們現在輸入的是字符型數據,而且字符型數據不是像數值型數據那樣,有幾位數字,字符型的數據只有一位,所以你輸入一位數據他就給一個變量,所以不需要像數值型的數據那樣隔開了,所以我們直接輸入三個連續的字母asd就可以了,就不用空格分開了,如果我們輸入a空格s空格d,那么他就會默認的把前三個字符送給三個變量了,也就是a空格s(因為空格也是一個字符)。(3)下面大家看一下這道例題。

//下面程序很簡單,就是輸入兩個數和一個運算符號,#include“stdio.h” void main(){

int;float z,x,y;char cc;printf(“please enter date:n”);scanf(“%f%c%f”,&x,&cc,&y);

Scanf函數總結

} if(cc=='+')z=x+y;if(cc=='-')z=x-y;if(cc=='*')z=x*y;if(cc=='/')z=x/y;printf(“%fn”,z);我們連續輸入三個1+2 結果輸出3,截圖如下

這里要注意的是,輸入1之后不能有空格,因為下面是一個字符型數據,輸入字符型數據之后,就可以有空格了,因為

Scanf函數總結

后面是一個數值型數據。(所以按照這種方式輸入也可以 1+ 2)(4),如果在“格式控制字符串中”除了格式聲明還有其它字符,則在輸入數據的時候,在對應的位置上應該輸入與這些字符相同的字符。#include int main(){

} 我們在輸入數據的時候應該這樣輸入,1,2,3 我要講的內容就要講完了,下面和大家說說在輸入這個數據的時候,盡量加入,分隔,scanf(“%d,%d,%d”,&a,&b,&c);這樣不容易出錯,如果什么符號也不用直接這樣的話scanf(“%d%d%d”,&a,&b,&c);大家一定要注意我上面說的三個例子。int a,b,c;scanf(“%d,%d,%d”,&a,&b,&c);printf(“%d%d%dn”,a,b,c);return 0;7

第四篇:淺析英語語言中的性別歧視

淺析英語語言中的性別歧視

摘要:性別歧視是現代社會一個被廣泛關注的問題。語言性別歧視也是性別歧視中很重要的一部分,并且語言歧視也得到了很多社會語言學家的重視與關注。語言是一面能夠反映社會文化與人們心理活動的鏡子。因此從社會語言學角度去分析英語語言中的性別歧視以及其成因是很有必要的。

關鍵詞:社會語言學;性別歧視;英語語言

Abstract: Sexism is an important issue in the whole society.Sexism language is a part of sexism which has attracted social linguiticians and psychologists’ attention.Language is a mirror of society which reflects people’s thought and culture.It is meaningful to study the phenomenon and reasons of sexist language from the perspective of social linguistics.Key words: social linguistics;sexism;English language 引言

語言一直以來都是社會的一面鏡子,反映著社會中人們的思想以及社會基本的價值觀。在二十世紀早期,性別不同而導致的語言差異開始引起學者的關注。但是語言性別歧視卻直到二十世紀六十年代才開始被研究。語言性別歧視是指從形式、意義以及語言的其他方面對于女性的歧視。語言是社會的產物,反應了特定時期社會的文化、習俗以及思想模式。因此,語言性別歧視也同樣反應了整個社會的對于女性的歧視的價值觀。社會中男女不平等現象也反應了社會的發展進程與發展中出現的問題。因此,語言性別歧視的研究對于社會的發展以及社會整體價值觀的形成有著很關鍵的意義。

著名語言學家羅賓·萊考夫在語言特征以及使用方面有所研究,并且她指出女性語言包括描述女性的語言以及女性使用的語言,這些語言在功能上就反應了對于女性身份的歧視。1922年,丹麥語言學家奧托·葉斯帕森從詞匯以及句法方面來描述了語言上的性別不同。二十世紀六十年代末期,許多學者開始嘗試從社會語言學角度分析女性語言。十年后,許多大學也開設了性別語言與行為課程。許多著名學者在二十世紀80年代將語言性別歧視進行了更深層次的研究。語言性別歧視已經成為了學者們廣泛研究的課題之一。

一、語言性別歧視的表現以及成因 1.語言性別歧視的表現

語言性別歧視首先體現在詞語的形成以及使用方面。男性和女性是生來平等的,并且彼此都需要互相尊重。在英語中,詞語的使用方面分為男性詞語和女性詞語。一些詞語只能用來形容男性而不能用于形容女性。并且一些只用于形容女性的詞語是對女性有歧視的。從詞語的形成上來說,英語中的許多既可以描述女性又可以男性的詞匯都是以男性詞匯作為詞根的。相反的,只能描繪女性的詞語都是從男性詞語中變化來的。比如prince-princess,host-hostess,hero-heroine等。還有一種詞語,描述女性的詞語是專門被標記出的,而男性詞語卻沒有任何標記。例如,ambassador可以同時表示男性大使和女性大使,但是ambassadress卻只能用來描述女性大使。同樣的例子還有poet和poetess。這些現象都可以體現出人們將男性語言作為標準和社會的主體語言,而女性詞匯則是男性詞匯的從屬或者演變。

在英語中,當我們不確定性別或不必要確定性別的時候,我們通常都用he來指代任何人。并且man這個詞也可以代表某一類特定的人,比如mankind,human,spokesman,congressman等。這個現象也體現了男性在社會中的主導地位。同樣,很多描繪女性的詞語可以反映出女性在家庭和社會中的地位。例如,housewife和earth-mother這兩個詞就可以表現出女性的生活是以洗衣做飯等家務為中心的。Secretary,nurse,stenographer這些詞語可以體現出女性擁有自己的職業但是收入水平非常低,如果有男性從事護士或秘書職業,我們一定會特意標記出male nurse和male secretary。人們通常會把高收入職業同男性聯系在一起,例如醫生、律師等。但是如果女性從事這種行業,人們就會特意標記處woman doctor和woman doctor。這些詞語的分類就體現出人們意識里認為男性就應該從事高收入以及挑戰性的工作,而女性只能從事低收入以及社會地位較低的工作。

在詞語的順序方面也能體現出語言性別歧視。在英語中,當我們需要同時提到男性和女性時,我們通常會說“ladies and gentlemen”,“bride and groom”,西方人認為“女士優先”是他們的理解。但是在這種情況下,人們認為女性是弱勢的性別,是需要被照顧的。大多數的情況,人們更習慣把男性詞語放在女性詞語之前,來表現女性的從屬地位,例如man and woman, male and female, husband and wife, Adam and Eve等。這種語言習慣也體現出了社會在語言方面對于女性的歧視。

從社會語言學的角度看,語言是作為一種表達思想的工具,并且是隨著人類社會的發展而發展的。從語義學的研究角度看,有很多詞語是贊揚男性卻貶低女性的。男性詞語通常是褒義詞而女性詞語通常是貶義詞。例如,wench這個詞語最早是用來形容鄉村姑娘,但是現在卻用來形容妓女。根據統計,英語中有超過500個詞可以表示妓女,但是只有65個詞可以用來表示男妓。

這種類型的歧視還有很多。例如bachelor和spinster都可以形容未婚者,但是bachelor用來形容男性未婚者,未婚的原因是因為男性很獨立并且享受單身狀態。但是spinster用來形容很難找到結婚對象的女性未婚者。我們可以發現這些詞語都反映了男性和女性社會地位的不同。

2.語言性別歧視的成因

語言是文化的一部分并且能夠反映社會整體文化。語言是被文化影響的,但是同時他也反映了文化中的民族特征。語言也可以表現出人們的思想,生活方式以及思維模式。所以語言中的性別歧視也體現了社會中的男性女性不平等的現象。這種現象是由特定的社會價值觀和思維模式決定的。語言是沒有感情色彩的,但是語言使用者會根據他們的價值觀以及觀點去給語言加上顏色。語言中的性別歧視不是一天就形成的。

社會環境是影響語言性別歧視形成的因素之一。語言是社會團體在環境中習得的。性別歧視語言進入惡性循環是由于西方社會傳統思想觀念造成的,對于女性的歧視似乎已經變成了文化的一部分。西方社會對女性的能力、價值觀和行為都是有偏見的,而這種偏見就形成了固定的價值觀和文化模式。這種性別歧視的社會成見是不公平的,他反映了社會的穩定發展是建立在犧牲女性利益的基礎上的。這就意味著女性在政治、社會、教育以及經濟方面都是不平等的。

從歷史的發展方面看,在西方社會,女性的社會地位是低于男性的。在語言的發展過程中,女性語言被認為應該是禮貌、保守、服從以及溫柔的。而相反的,男性語言就更直接、勇敢和堅持。在西方,宗教也是影響語言的重大因素。在圣經中,女性就屬于從屬地位。上帝首先創造了男性亞當,而當亞當需要幫助的時候,上帝才創造了女性夏娃,夏娃也是由亞當的一根肋骨創造的。這也就意為著,女性是從男性從產生出來的。因此語言也把男性語言放在了首位。

二、避免性別歧視語言的措施

性別歧視語言在污染著我們的語言環境并且影響了我們的交流,甚至會導致矛盾和沖突。所以在一些正式場合需要規避性別歧視語言,使人與人之間的交流更加的有效。如果我們都在避免使用性別歧視語言,人們之間交流會更有效,表達會更清楚,語言也會變得更優美。更重要的是,避免使用性別歧視語言可以促使社會中的性別平等。西方國家在避免使用性別歧視語言方面給予了高度的關注。

當沒有必要指明性別的時候,我們應該避免使用性別形容詞,例如lady doctor, female lawyer等。性別形容詞會暗示人們這樣的工作職能由男性或女性來擔任。這也是一種性別歧視。我們也應該避免使用Mrs.和Miss,而使用Ms,當我們不知道一位女性的婚姻狀況時,我們最好使用Ms。在正式場合我們也應避免使用性別歧視語言,可以使用一些委婉語來表達一些可能會貶低女性的詞語,這樣可以避免交流中的尷尬。

英語中的一些以男性詞語為詞綴的復合詞是用來表示職業的,我們可以使用一些中性詞來避免在職業稱謂方面的性別歧視語言,例如“消防員”,我們可以用firefighter而不是fireman。同樣的例子還有news reporter和 newsman,police officer 和 policeman。

三、結論

性別歧視語言不論是在語言學還是在整個社會中都是一個重要的議題。這方面的研究吸引著越來越多的學者。跟男性相比,女性的社會地位是略低的。語言并不能影響女性的社會地位,因為性別歧視是整個社會的問題,他反映著歧視女性的思想已經在人們心中根深蒂固,成為了歷史文化的一部分。我們只有從根源處消除人們對于女性歧視的這一思想,性別歧視語言現象才有可能被規避。人們應該意識到,給及女性平等的社會地位,真正實現兩性平等才是最重要的。

參考文獻: 白解紅著.性別語言文化與語用研究[M].長沙:湖南教育出版社,2000 ,9122 3 楊永林著.社會語言學---功能性別稱謂篇[M].上海:上海外語教育出版社,2004 ,201122 5 趙蓉暉著.語言與性別---口語的社會語言學研究[M].上海:上海外語教育出版社,2003 ,41-53

第五篇:淺談英語語言中的性別歧視

陳 賀

(宿州學院 外國語學院,安徽 宿州 234000)

摘 要:從英語語言出發,分析其中的性別歧視現象:視男性用語為主體,女性用語為變體或附屬;兩性詞語在詞義上不對稱;詞匯排序上遵循“男先女后”的原則。接著從勞動性別分工、宗教思想、性別角色社會化三個角度對之進行原因解讀。這為當前的性別語言研究提供一定的參考和啟示。

關鍵詞:性別;勞動分工;宗教;角色社會化

中圖分類號:H0-05 文獻標識碼:A 文章編號:1673-2596(2011)09-0209-03 性別歧視是以性別為基礎而產生的一種歧視現象,它可以表現為男性對女性的歧視,也可以表現為女性對男性的歧視。《朗曼英語詞典》定義性別歧視為:“以性別為基礎的歧視,尤其是男性對女性的偏見。”《美國傳統詞典》關于“性別歧視”的解釋是:“一類性別成員對另一類性別成員,尤其是男性對女性的歧視。”因此,“性別歧視”通常是對女性的歧視,是社會對女性的偏見[1]1。語言是人們交流的重要工具,是人類思想的重要載體,折射了社會的文化習俗與價值觀念。通過語言,可以管窺到人們的性別觀念。幾千年來,英語國家人們一直生活在父權制體系的桎梏之下,對女性懷有深深的歧視。這一性別態度,在英語語言中有著深刻的印證。那么,本文將揭示英語語言中的性別歧視現象,并對之進行原因探討。

一、英語語言中的性別歧視

(一)以男性為規范

以男性為規范是語言性別歧視的重要表現之一[1]1。表現在具體語言事實上,即語言視男性用語為主體,將女性用語當作變體或附屬[2]。這一特征在英語語言中具有鮮明的體現。

(二)詞義上的不對稱

其次,與男性相比,英語中與女性相關的貶義詞數量眾多。據Dale Spencer統計,英語中表達“性生活放蕩”的詞語,至少有220個是與女性相關,而只有20個左右與男性有關。另據研究,英語中表示“在性生活上亂七八糟的女子”的詞多達320個,幾乎所有關于女性的詞都有具有貶義,而一部分關于男性的詞則含有“哪個男子不風流的”容忍之意。

再次,男女詞義演變上不對稱。在長期的語言交際過程中,男性詞語向褒義方向演變,而女性詞語則有惡化的趨勢。King(國王)、lord(老爺)、master(主人)、father(父親),在現代英語中,只要把他們的首字母大寫,就可以分別用來指“上帝”、“基督”、“主或神”。與男性褒化相對,女性詞語往往增加了貶義。Tart一詞原指一種小糕餅,后用作親昵的稱呼年輕女子,后來演變為“富于性感的女子”,隨后又轉化為“對道德不甚介意,作風隨便的女子”,而現在又指“在街上拉客的女子”。

(三)語序上的歧視

二、英語中性別歧視產生的原因

語言依賴于社會,是人類社會的產物。不同的社會形態,會產生不同的語言體系。語言的形成與一定的社會文化、風俗習慣、價值觀念等,有著密切的關系。因此,英語語言中的性別歧視現象,與英美國家男女不平等的社會現實不無關聯。而這種不平等的社會現實,與以下三個層面緊密相關:

(一)勞動性別分工

馬克思主義女性主義認為男女不平等源自勞動性別分工[3]67。勞動性別分工是人類最主要的社會分工形式,以生理性和社會性別為基礎,社教化將男性和女性分別規范在以性別特質界定的工作崗位[3]68。依照性別分配勞動是人類最早的勞動分工方式,它是人類尋找到的最有效的組織社會生活的方法[4]。在西方農業社會里,勞動性別分工模式主要與性別天然差異和當時的生產力發展水平有關:

首先,在某種程度來講,勞動性別分工是自然秩序的結果[5]。根據達爾文理論,男性與女性具有一定的生理差異,兩性各有獨特的身體特征。總體而言,在體格方面,男性身材高大,肌肉發達,身體健壯;女性則身材較小,身體比較纖弱。在性格方面,男性精力旺盛,富有冒險精神;女性則比較文靜、溫柔、隨和。由于這些差異,男性似乎更加適合從事與生產有關的勞動,如養殖、農耕等。而女性則適宜從事與人的再生產有關的勞動,如生育、撫育和家務勞動等。

其次,勞動性別分工形式與生產力的發展水平有直接的關系。在原始社會,生產力水平低下,男性與女性必須一起勞動,才能維持生活:女性采摘水果和種子,男性狩獵打魚。由于當時勞動工具落后,采摘是人們主要的生活來源。于是,在一定時期內,人類社會是母系氏族社會。當人類步入農業社會后,生產力水平有了極大改善,社會的主要經濟支柱轉為農耕等體力勞動。由于身體上的差異,男性身體更加強壯,更適合從事這些勞動。于是,人類社會逐漸形成了新的勞動性別分工,男性主要從事農業生產等,女性則局限在家庭范圍之內。

因此,在西方農業社會勞動性別分工模式里,男性是社會生產的主體。在家庭和公共空間的劃分過程中,財產關系成為決定性別秩序的基本決定因素[6]。于是,長期以來,在經濟上占主導地位的男性主宰著社會的一切,壟斷了政治、經濟、法律等公共領域;女性則處于從屬地位,被禁錮在家庭范圍內。這一社會特征反映在語言層面上,表現為語言中存在大量的歧視現象。

(二)宗教思想

基督教是西方文化的基石,在西方國家文明發展中起到舉足輕重的作用,對社會意識形態的形成具有至關重要的意義。但是,基督教教義以男性為主體,到處充斥著對女性的排斥和歧視。在這種宗教思想體系下,男性有著無與倫比的社會地位,他們是按照神權來進行統治,按照神權來規范女性的一切[7]22。在《圣經》中,上帝創造的第一個人類是男性。上帝賦予他無限的權利,制造了世界萬物,按照他的意愿命名,歸他統治。為了不讓他感到孤獨,上帝又取其一根肋骨,創造了一個女性,來幫助他,陪伴他。于是,女性往往被看作是男性的附屬品。因此,在社會關系中,男性支配社會的方方面面,而女性只能處于從屬的地位:

你們作妻子的,當服從自己的丈夫,如同順服主。因為丈夫是妻子的頭,如同基督是教會的頭,他又是教會全體的救主。教會怎樣順服基督,妻子也要怎樣凡事順服丈夫。(《以弗所書》第五章)

而且,女性在《圣經》中常被看作萬惡之源。在伊甸園中,夏娃受到蛇的誘惑,偷吃了智慧樹上的蘋果,并引誘亞當也偷吃了禁果。于是,他們被上帝驅趕出伊甸園,被罰永遠生活在苦難之中。因此,人們認為夏娃對人類的墮落負有不可推卸的責任。同時,在《圣經》中,無論是《舊約》還是《新約》,女性常常被忽略,鮮被提及。希伯來歷史上涌現出許多杰出的優秀女性,但《圣經》對她們的記載極其簡略。例如:女先知米利安,與摩西、亞倫有著同等重要的地位,不僅是女性的領導者,而且還曾經救過摩西,在以色列人走出埃及的過程中起到了無可替代的作用。但是,《圣經》對其描寫很少。

與之相比,男性則幾乎壟斷了《圣經》的所有章節。《圣經》中幾乎所有重要的人物都是男性。上帝稱為我們的“父親”,上帝的的后代是兒子耶穌。引領猶太人走出埃及的摩西,猶太人的祖先亞伯拉罕,以及耶穌的十三個門徒,全部都是男性。而且,《圣經》對其中的男性描寫非常詳盡,不吝筆墨。

總之,《圣經》是一本站在男性立場上,為男性書寫的宗教典籍。作為基督教的重要經典,《圣經》影響廣泛,其所散播的性別觀念滲透到社會的方方面面,使得西方社會奠定了男尊女卑的格調,使得英語語言存在嚴重的性別歧視色彩。

(三)性別角色社會化

性別角色社會化指個體在社會生活中逐漸學會按照自己的性別角色規范行事的過程[6]76。每個人一出生甚至在出生前,就可能被身邊的人們按照社會性別的固定模式來對待和教育。兒童從父母、教師、同輩、媒體、社會等多方面得到性別角色的信息,并受其影響,從中學習到怎樣做符合社會規范的“男孩”或“女孩”,“男人”或“女人”。而且,性別角色社會化是一個持續的過程,會貫穿于每個人的一生。

性別角色社會化是自動的無意識的過程,但同時又是每個人積極參與的過程。在性別角色形成過程中,人們在很大程度上是不會意識到文化如何影響兩性,并對不遵從社會期望者進行懲罰[8]169。但是,性別角色社會化并不是一個完全被動的過程。在社會性別期望的驅使下,每個人會不由自主地按照社會期望進行性別角色社會化。根據心理學家的說法,“每個人不是被動的接受性別角色社會化,而是按照他對自我、社會期望、行為規范的理解,積極的參與這一個過程”[8]169。

同時,在性別角色社會化過程中,一系列因素,如生產方式、政治制度、社會等級劃分等,會影響到性別角色的形成[9]。換句話說,社會性別角色的形成,會受一定社會背景的影響,如:語言、媒體、文學、宗教、教育機構、家庭等。每一個人都會參照他的生長環境,如家庭、教育材料等,來逐漸形成適當的性別角色。

幾千年來,英美國家是典型的父權制社會。男性壟斷著社會的政治、經濟、文化等公共領域,女性的社會活動范圍則局限在家庭。在當時的社會意識形態下,女性與男性相比天生具有缺陷,是不完整的人。而且,女性是“人類墮落”和“人類原罪”的根源。

于是,在這樣的社會環境下,女性一出生就被灌輸相應的性別觀念,并逐步的進行性別角色社會化。她們漸漸的接受其性別角色定位,認為女性是低卑的,一生應依附于男性,并遵從相應的道德規范,承擔起家庭范圍內的社會職責。這使得女性認同社會中的性別不平等,對語言中性別歧視現象熟視無睹,從而在一定程度上使得英語語言中的性別歧視一直延續下去。

三、結語

語言的產生離不開一定的社會環境。因此,英語語言中的性別歧視不僅僅是一種語言現象,它是英美國家男女不平等的社會現實的反映。隨著三次婦女運動的高漲,英美國家女權主義者積極投身到語言改革與規劃活動中來,英語中的性別歧視現象得到一定改觀。但是,由于歷史、文化、社會等因素,英語中的性別歧視并未完全消除。只有進一步深化性別研究,提高女性社會地位,完全實現男女平等,才能使語言真正的平等。

下載c語言中可變參數函數設計方案(推薦閱讀)word格式文檔
下載c語言中可變參數函數設計方案(推薦閱讀).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    新聞語言中的白描

    新聞語言中的白描 (2009-10-30 18:48:18) 轉載 標簽: 分類: 理論探究 新聞寫作培訓 白描 雜談 白描是中國繪畫的一種傳統技法,線條簡練而傳神逼真,不用顏色渲染。應用到新聞寫作......

    英語語言中的性別歧視

    最新英語專業全英原創畢業論文,都是近期寫作 1 A Comparison of the English Color Terms 2 英語新聞標題的語言特點及翻譯 3 詩歌《飛鳥集》的意象評析 4 淺析好萊塢英雄主......

    中英語言中的性別歧視分析

    2015年最新全英原創畢業論文,都是近期寫作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 《......

    略談網絡語言中的錯別字

    網絡語言的分析 姓名:張庭輝 學號:141022079 班級:漢語國際教育1班 【摘要】:如今互聯網已經進入千家萬戶,也發展成為人們必不可少的交往方式,在這個虛擬空間里,人們新的交流的工......

    淺談英語語言中的性別歧視現象(定稿)

    英語專業全英原創畢業論文,公布的題目可以用于直接使用和參考(貢獻者ID 有提示) 最新英語專業全英原創畢業論文,都是近期寫作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1......

    英語語言中的性別歧視及其變化

    英語語言中的性別歧視及其變化 】 引言 語言是現實世界的一面鏡子,現實世界的種種現象,美丑好壞,盡現其中。在一向聲稱人生而平等的英語國家里,其實也有諸多的不平等。男女不......

    c語言中swap問題小結

    #include #include void swap1(int x,int y) { int temp; temp=x; x=y; y=temp; } void swap2(int *x,int *y) { int *temp; temp=x; x=y; y=temp; } void swap......

    C語言中的文本Txt操作

    對于文件使用方式有以下幾點說明: 1)文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是: r(read): 讀 w(write): 寫 +: 讀和寫 a(append): 追加 t(text): 文本文件,可......

主站蜘蛛池模板: 色老板美国在线观看| 国产成人夜色高潮福利影视| 亚洲中文字幕av无码区| 亚洲精品精华液一区二区| 久久午夜羞羞影院免费观看| 日日摸处处碰夜夜爽| 337p日本大胆欧美人术艺术69| 国产亚洲成av人片在线观看| 久久综合激激的五月天| 久久亚洲色一区二区三区| 天天摸天天摸色综合舒服网| 日本高清免费毛片久久| 无码日本精品xxxxxxxxx| 人妻无码系列一区二区三区| 亚洲成av人片在线观看www| 久久中文精品无码中文字幕| 夜夜添无码一区二区三区| 国产精品久久久久9999无码| 亚洲顶级裸体av片| 国产一线二线三线女| 国产精品国产成人国产三级| 人妻少妇被粗大爽9797pw| 精品玖玖玖视频在线观看| 久久视频这里只精品| 亚洲欧洲日本综合aⅴ在线| 色婷婷六月亚洲综合香蕉| 囯产精品久久久久久久久久妞妞| 少妇被躁爽到高潮无码久久| 骚片av蜜桃精品一区| 亚洲熟妇无码乱子av电影| 成在人线av无码免费高潮求绕| 国产精品久久久久久| 2021最新国产精品网站| 在线观看午夜亚洲一区| 日韩中文字幕区一区有砖一区| 国产精品久久久久久久| 亚洲—本道中文字幕东京热| 亚洲国产综合精品中文第一| 久久96热在精品国产高清| 麻豆国产原创视频在线播放| 久久免费午夜福利院|