如何在c語言中以陣列指標作為形參輸出陣列

2021-08-11 19:13:50 字數 3840 閱讀 4296

1樓:

senddata[2]=0,0和'\0'都等於0,因此(*info) != '\0'會在k=2時不成立

建議:1.另外傳一個參數列示命令的長度;2 另外尋找一個一定不會在正常的命令中出現的數字作為結束符而不是正常命令中間就可能出現的0

另外有一個優化建議是吧info!=null的判斷提前做而不是和for攪在一起,因為info本身的值在迴圈中是不斷加1的,不太可能加來加去溢位到0。。而且更新語句不需要寫*info++ 寫info++就可以了

2樓:匿名使用者

//#include "stdafx.h"

#include "stdio.h"

void  cmdsend(unsigned int * info);

int main()

}void  cmdsend(unsigned int * info, unsigned len)

你自己也發現了senddata[2]就是0和你指定'\0'都是ascii 0,還有三個地方要注意,

就是你的形參指標info, 你使用的是*info ++(這意思是指標你陣列元素值在遞增,可是你要的不是地址值遞增嗎,應該是info ++)

for迴圈中你所寫的((*info) != '\0')&& (info != null), 你的*info在sendata[2]就為0了,並且也確實info !

= null, 退出條件都為真,所以你還是照樣輸出到senddata[2]便退出了,所以建議像以上修改,再傳遞一個陣列(即線性表)長度進來,便可以解決這個問題;還有一個辦法,除非你陣列裡的元素不為數字,而是數符,如下

senddata[0] = '8'; //ascii 0x38

senddata[1] = '2'; //ascii 0x32

senddata[2] = '0'; //ascii 0x30(不是ascii 0)

senddata[3] ='4'; //ascii 0x34

senddata[4] ='5'; //ascii 0x35

senddata[5]='\0';

並且你cmdsend函式中,printf("senddata is %c\r\n",*info);即可

stdafx.h這個是哪個標頭檔案,你是不是想用stdio.h??

3樓:匿名使用者

陣列 與 普通指標 的區別:

1、指標的本質是一個與地址相關的複合型別,它的值是資料存放的位置(地址);陣列的本質則是一系列的變數。

2、陣列名對應著(而不是指向)一塊記憶體,其地址與容量在生命期內保持不變,只有陣列的內容可以改變。指標可以隨時指向任意型別的記憶體塊,它的特徵是"可變",所以我們常用指標來操作動態記憶體。

3、當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

因為第三條,當把陣列名作為函式的形參進行傳遞時,該效果等同於傳遞一個同型別的指標。直接在程式當中呼叫 函式名(陣列名)即可。

例程:#include

int a=;

void print(int a)

int main()

4樓:匿名使用者

用那個字串命令 strlen 命令算出陣列長度,for迴圈,按個數輸出

5樓:匿名使用者

#include "stdafx.h"

void cmdsend(unsigned int * info);

int main()

}void cmdsend(unsigned int * info)

c語言中的指標陣列和陣列指標的區別

6樓:黑丶雨

指標陣列:陣列裡的每一個元素都是指標如*p[10],裡面的 p[0] 到 p[9] 都是指標;

可參考:http://baike.

陣列指標:指向一個陣列的指標,如 arr[10] 是一個陣列, 讓一個指標指向這個陣列 p = arr;

訪問時通過 *(p + n) 或 p[n] 訪問元素值,n為元素索引值;

可參考:http://baike.

7樓:育知同創教育

int (*p)[4]; // 定義一個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。

int *p[4]; // 定義一個指標陣列,陣列中每個元素是一個指標,指標指向**就要根據程式來定了。

判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。

int (*p)[4]; // 由於( )的優先順序高,說明p是一個指標,指向一個一維陣列的指標

int *p[4]; // 由於[ ]的優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列

請問在c語言中,函式傳參時怎樣利用指標傳遞陣列

8樓:大野瘦子

陣列名就是指標,例如:

#include

void pr(char *p)

printf(p);

void main(void)

char s = "abc";

pr(s);

9樓:樹桖珍

比如函式需要一個整型陣列:

void ex(int a)

或者可以寫成:

void ex(int *a)

效果是一樣的。

使用的時候:

引用陣列中的第2個元素(即下標為1的元素)a[1]

或者*(a+1)

基本上與陣列的正常使用沒有區別。

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

10樓:匿名使用者

宣告:int arr(int a);<=>int arr(int *a);(計算機會把前者也翻譯成後者處理,效果等價)

陣列名就是指標

int a[5]=;

引用時:

arrey=arr(a);

其實形參是一個指向該陣列的指標,而陣列只有一個,指向即操作返回陣列值我不知道你想問什麼

11樓:匿名使用者

直接上例子:

比如函式需要一個整型陣列:

void ex(int a)

或者可以寫成:

void ex(int *a)

效果是一樣的。

使用的時候:

引用陣列中的第2個元素(即下標為1的元素)a[1]

或者*(a+1)

基本上與陣列的正常使用沒有區別。

(但要注意 由於呼叫函式時只傳遞了指標(首地址) 所以程式不會做超界檢查)

你在子函式中進行的更改會直接影響到原陣列的內容這也就意味著 只要你在處理函式中更改了資料 那麼任何函式(包括原函式)訪問這個陣列時 都使用的是你更改以後的數值

12樓:匿名使用者

int *p;

int a[10];

p = a;

c語言指標陣列如何存放函式地址C語言指標陣列如何存放函式地址

c c 的指標的靈活,常把許多初學者搞暈,連高手也是如此。1.當然,可以呀,一切資料都可返回 2.複合指標型別直接表示非常麻煩 連高手都是這樣 可以分解成多個簡單型別 typedef void funtype void funtype num 100 分解後簡單多了!3.因為函式名不是字串,初始化時...

c語言中,指標和陣列的區別和聯絡

區別 c語言把記憶體劃分成四個區,它把一般的變數和陣列等存在於記憶體中的棧區,所以陣列在c語言的定義中只是一組同型別的普通變數,即使這個變數有可能是指標。所以他的作用比指標小的很多,而指標可以指向任何區的任何資料,所以就會覺得指標和陣列名很像,但是必須要注意的是,陣列名只是指標中的一種,它是指標中只...

c語言中如何讓指標指向已知地址,C語言中,如何讓指標指向一個已知地址

必須轉換型別,你的第二條是正確的。第一條編譯不通過的是錯誤的,因為他只是一個16進位制的數,而p是指標,是不能賦值的。也就是第一條賦值語句是將一個整數賦值給指標,肯定不行的。若是 0 是已經資料型別 是 t 那麼t p t unsigned long 0 若是在未知道的情況,可能崩潰 如果是整形 i...