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

c語言二維字元數組傳參數

發布時間: 2022-05-20 05:18:52

『壹』 c語言:字元串做為函數參數傳遞

1、值傳遞

void swap(int x,int y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

}

執行後,並不會交換。

2、引用傳遞

void swap(int &x,int &y)

{ int temp = x;

x = y;

y = temp;

}void main()

{

int a = 10, b = 20;

swap(a, b);

printf("a=%d b=%d ", a, b);

}

執行後,發生交換。

3、指針傳遞

void swap(int *x,int *y)

{ int temp = *x; *x = *y; *y = temp;

}void main()

{

int a = 10, b = 20;

swap(&a, &b);

printf("a=%d b=%d ", a, b);

}

執行後,發生交換。

參數傳遞只有上面三種,但是如果加上數組,就會產生幾種新形式。

首先,明確數組型變數名本身只是該數組所佔存儲空間的首地址:

int a[3] = { 1, 2, 3 }; int *p = a; //等價於下行 //int *p = &a[0];

printf("%d", *p);

典型的數組做參數。

void fun(char s[]){ for (int i = 0; s[i] != ''; i++)

printf("%c", s[i]);

}void main()

{ char str[] = "Hello World!";

fun(str);

}

函數調用時,這里系統不會為形參分配數組存儲空間,而是僅僅分配一個存放數組地址(第一個元素地址)的存儲空間,此後,將實參數組的首地址傳遞給形參變數。

其實本質與下相同,只不過還是數組形式的(數組名代替指針)。

既然數組型變數名本身只是該數組所佔存儲空間的首地址,我們當然可以用指針做形參來接收數組實參。

void fun(char *p){ while (*p)

{

printf("%c", *p);

p++;

}

}void main()

{ char str[] = "Hello World!";

fun(str);

}

不過問題是如果這樣,無法把握數組結束(除非知道數組長度)。而對於字元數組(上例),由於字元串末尾有結束標志''(ascii碼正好是0),所以就很容易利用指針來判斷字元串是否結束。

(1)c語言二維字元數組傳參數擴展閱讀:

調用帶參數的函數:

在調用函數時,可以向其傳遞值,這些值被稱為參數。

這些參數可以在函數中使用。

可以發送任意多的參數,由逗號 (,) 分隔:

myFunction(argument1,argument2)。

當聲明函數時,請把參數作為變數來聲明:

function myFunction(var1,var2){這里是要執行的代碼}。

變數和參數必須以一致的順序出現。第一個變數就是第一個被傳遞的參數的給定的值,以此類推。

按值傳遞參數:

按值傳遞參數時,是將實參變數的值復制一個到臨時存儲單元中,如果在調用過程中改變了形參的值,不會影響實參變數本身,即實參變數保持調用前的值不變。

按值傳遞參數時,需要在參數名前加"ByVal"關鍵字。

按地址傳遞參數:

按地址傳遞參數時,把實參變數的地址傳送給被調用過程,形參和實參共用內存的同一地址。在被調用過程中,形參的值一旦改變,相應實參的值也跟著改變。

如果實參是一個常數或表達式,Visual Basic 6.0會按"傳值"方式來處理,按地址傳遞不需要"ByVal"關鍵字。

按數組傳遞參數:

在VB6.0中,允許使用數組作為實參傳遞到子過程的形參中,數組傳遞必須採用地址傳遞的方式來傳遞參數。數組參數在傳遞時應注意以下兩個方面:

① 在實參和形參列表中只寫數組名,忽略維數的定義,但圓括弧不能省,當數組作為參數傳遞時,系統將實參數組的起始地址傳給過程,使形參數組也具有與實參數組相同的起始地址,若參數是多維數組,每維以逗號分隔。

② 被調過程可分別通過Lbound和Ubound函數確定實參數組的下界和上界。

參考資料來源:網路-參數傳遞

參考資料來源:網路-字元串



『貳』 c語言字元型數組傳入函數

在主函數裡面,sizeof是數組占的空間
在作為參數時,會被轉為指針
所以在函數裡面列印的是sizeof(char*)
對於任意指針,sizeof的值都是當前編譯器位數。你的是32位編譯器,輸出就是4
ps:4位元組=32位

『叄』 c語言怎麼把二維數組的字元串給到一維數組

按元素賦值:
遍歷一維數組,並將每個元素賦值到二維數組的對應元素上。
或者遍歷二維數組,將每個元素賦值為一維數組對應值上。
優點為操作靈活,可以按照需要任意賦值。
2 當一維數組和二維數組類型相同,而且賦值順序與一維數組中的存儲順序完全相同時,可以用memcpy的方式,直接一次性賦值。
如一維數組為a,二維數組為b,基礎類型為TYPE,需賦值元素個數為n,可以調用
memcpy(b,a,sizeof(TYPE)*n);
該方法有點為操作簡單,執行效率高。
不過所需滿足的前提條件多。在滿足上述所有條件時,用memcpy的方式更為簡單。

個就是apply的一個巧妙的用處,可以將一個數組默認的轉換為一個參數列表([param1,param2,param3] 轉換為 param1,param2,param3) 這個如果讓我們用程序來實現將數組的每一個項,來裝換為參數的列表。

『肆』 C語言中二維字元數組應該怎樣賦值

二維數組賦值的一般形式是:dataType arrayName[length1][length2]。result二維字元數組可以這樣賦值,result[0][0]=seq1[0] ;result[1][0]=seq2[0]。

dataType arrayName[length1][length2],其中,dataType 為數據類型,arrayName 為數組名,length1 為第一維下標的長度,length2 為第二維下標的長度。

例如:int a[3][4],定義了一個3行4列的數組,共有3×4=12個元素,數組名為a,即:

a[0][0], a[0][1], a[0][2], a[0][3]

a[1][0], a[1][1], a[1][2], a[1][3]

a[2][0], a[2][1], a[2][2], a[2][3]

在二維數組中,要定位一個元素,必須給出一維下標和二維下標,就像在一個平面中確定一個點,要知道x坐標和y坐標。例如,a[3][4] 表示a數組第3行第4列的元素。

(4)c語言二維字元數組傳參數擴展閱讀:

二維數組的地址計算

有二維數組A[m][n],設a[p][q]為A的第一個元素,即二維數組的行下標從p到m+p,列下標從q到n+q,按「行優先順序」存儲時則元素a[i][j]的地址計算為:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按「列優先順序」存儲時,地址計算為:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放該數組至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組

『伍』 C語言關於二維字元數組的使用

這是c語言里字元數組的常見錯誤。

c語言里給字元數組賦值很麻煩,
像char string[10]; string = 「aaa」;這樣的語句不能用來給字元數組賦值。
這種方法只有在定義的時候才能用 如char string[10] = 「aaa」;

你的關於二維數組的想法是對的,你的a[m][n]里,每個a[m]就相當於上述的string[10]的string,存放著數組的首地址。

錯的就是賦值的方法,可以#include<string.h>然後用strcpy(a[i],"ZQU");

strcpy()這個函數就是字元串復制 string 。

『陸』 如何在C語言的程序中將動態分配的二維數組當做一個參數傳入某個函數

我不明白,如果兩個維度都不是事先確定,你上面要怎麼定義?

arr[][4];

好吧,如果你說的那個可行

那就傳那兩個維度進去。
前面arr[i][j]
那麼就void func(int i,int j,int num)
我不敢保證在func裡面使用到arr[][]的時候貌似能直接使用arr[i][j],我記得這樣用會出錯。
所以你要運算那個地址。
你想要的比如是5行4列的 arr[5][4]
你要第第二行第二個數
那麼就要*(arr+(2-1)*4+2),這樣來得到數字

如果你事先就知道這個維度的話,
直接設定個全局變數
然後連數組都不用傳進去就可以直接運算的。
數組是記錄地址的,會直接修改在原來的地方

『柒』 C語言中如何將二維字元數組作為函數參數引用傳遞

不可能達到目的。因為C語言中沒有引用這類型,C++才有。另,C/C++都不支持傳遞數組,只能傳遞數組的首元素或行指針,所以即使是C++,也只能傳遞數組指針的引用,而不可能傳遞數組的引用,因為數組沒有引用。

『捌』 c語言二維字元數組傳入函數的問題

既然只傳一行,幹嘛要用(*)[]型形參?用char *p或char p[]不就足夠了?另外,50x1000000的數組大了點,聲明全局數組吧,局部數組不支持。

『玖』 C語言動態分配變長度的二維字元串數組的函數的問題。

#include<stdio.h>
#include<stdlib.h>

char**read(intm){//第一維的長度作為形參輸入
inti=0,n;
char**a=(char**)malloc(sizeof(char*)*m);//分配第一維的內存
for(i=0;i<m;++i){
printf("inputthelengthofthe%dprovince! ",i+1);
scanf("%d",&n);//讀取第二維的長度
getchar();
a[i]=(char*)malloc(sizeof(char)*(n+1));//分配第二維的內存
if(a[i]){
printf(" ");
gets(a[i]);//輸入字元串
}
elseexit(-1);
}
returna;
}

intmain(){
inti,n=3;
char**s=read(n);
for(i=0;i<n;++i)
printf("%s ",s[i]);
return0;
}

『拾』 C語言字元串二維數組申明應用問題

一、
char (*t)[60]表示定義了一個指向大小60的數組的指針t。t+1在內存中跨度就是60個字元大小。
gettext(text,&i);傳參text 相當於t=text。那麼t,t+1,t+2分別表示text[40][60]的第1行,第2行,第3行。
二、

聲明處的參數 char [][60] 就是二維數組。傳參行數不定 列數必須60
三、
text是數組名,本身也是一個常量指針(不能改變其值),表示指向數組首地址的指針
四、
同上說明 指向數組首地址的指針可以表示數組