1. c語言 用函數來創建動態數組,怎麼實現
應該這樣
void CreateArray(int n, int** a)
{
*a = (int *) malloc (sizeof(int) *n);
}
2. C語言數組怎麼調用
有好幾種方法,我稍微說一下,你回去找書看一看:
通過數組首地址 指針 帶下標的指針引用一維數組元素。
引用一維數組中的某一個元素的方法:
* :求當前地址的內容 & :求當前內容的地址
1 a【i】
2 *&a【i】 //*在定義語句時代表定義一個指針變數,當在執行語句部分時代表間址運算符,引用一個指針變數指向的地址的內容。&叫求地址運算符,求當前內容的地址。所以*和&就像乘號和除號一樣,互相抵消了。
3 *(a+i):在數組名的地址上,加上i個存儲單元。代表第(i+1)個元素,用間址運算符引用它,即等價於a[i]
4 當(p=a;||p=&a【0】) 則 *(p+i)等價於a[i]
5 當(p=a;||p=&a[0]) 則 p[i] 等價於 a[i] //方括弧不僅表示數組元素的記方括弧不僅表示數組元素的記方括弧不僅表示數組元素的記方括弧不僅表示數組元素的記號號號號,也是一種運算符也是一種運算符也是一種運算符也是一種運算符.
總結:引用一維數組元素 a[i] 的四種方法: a[i] *(a+i) 若p=a, 則 p[i] *(p+i) 表示a[i]的地址的方法:&a[i] a+i p+i 都表示當前數組第i個元素的地址。
http://wenku..com/view/46092a66783e0912a2162a27.html這是引用的網頁,你可以自己去看看!
3. 關於c語言中數組作為函數參數的函數之間調用問題
1、新建一個數組作為參數項目,如圖所示:
4. 單片機C語言如何實現數組動態調用
sizeof一般是在編譯時計算,不適合用在你這種情況,如下修改已模擬驗證可切換傳送。
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*********埠定義*************/
//SCLK串列同步時鍾
//SID串列數據輸入端
//CS片選,高#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*********埠定義*************/
//SCLK串列同步時鍾
//SID串列數據輸入端
//CS片選,高電平有效
sbitCS=P1^2;
sbitSID=P1^1;
sbitSCLK=P1^0;
/******************************/
/*******字幕顯示定義***********/
ucharcodeTable1[]={"ILoveMCU"};
ucharcodeTable2[]={"我愛單片機!"};
/******************************/
voidDelaynms(ucharx)
{
uchari,j;
for(i=0;i<x;i++)
{
for(j=0;j<110;j++);
}
}
voidDatComOperation(uchardatas,uchardatcom)
{
uchartemp;
uinti;
temp=datas;
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
temp=datcom;
temp&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
temp=datcom;
temp<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
CS=0;
Delaynms(10);
}
voidSendCommand(ucharcomm)//12232發送指令
{
DatComOperation(0xf8,comm);
}
voidSendData(uchardatas)//12232發送數據
{
DatComOperation(0xfa,datas);
}
voidLcd12Initial()
{
Delaynms(100);
SendCommand(0x30);
SendCommand(0x02);
SendCommand(0x06);
SendCommand(0x0c);
SendCommand(0x01);
SendCommand(0x80);
}
voidDispInfor(ucharx,ucharcode*arrays)//???????
{
uchari,j;
SendCommand(x);//定義字元顯示的位置
//for(i=0;i<sizeof(arrays)/sizeof(arrays[0]);i++)
//SendData(arrays[i]);
i=0;
while(j=arrays[i++])SendData(j);
}
voidmain()
{
Lcd12Initial();
DispInfor(0x80,Table1);//DisInfor(0x80,Table1);
DispInfor(0x90,Table2);//DisInfor(0x90,Table2);
while(1);//等待
}
5. 用C語言寫了一個輸入一個一維數組的函數,如何在後來寫的函數中調用該數組
在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。
在大多數情況下,一維數組和一維指針是可以通用的。
比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。
代碼可以寫成如下形式:
int*int_array_create(int n)//參數n為數組元素個數
{
int*r;
if(n<=0)return NULL;//參數錯誤
r=(int*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
return r;//返回得到的整型數組的指針。
}
(5)C語言函數如何調用動態數組擴展閱讀:
return是C++的關鍵字,它提供了終止函數執行的一種方式。當return語句提供了一個值時,這個值就成為函數的返回值.
說到return,有必要提及主函數的定義,下面是從網路上找到的資料,好好消化吧,對了解主函數中返回值的理解有很大的幫助.
很多人甚至市面上的一些書籍,都使用了void main(),其實這是錯誤的。C/C++中從來沒有定義過void main()。
C++之父Bjarne Stroustrup在他的主頁上的FAQ中明確地寫著The definition void main(){/*...*/}is not and never has been C++,nor has it even been C.(void main()
從來就不存在於C++或者C)。下面我分別說一下C和C++標准中對main函數的定義。
1、C
在C89中,main()是可以接受的。Brian W.Kernighan和Dennis M.Ritchie的經典巨著The C programming Language 2e(《C程序設計語言第二版》)用的就是main()。不過在最新的C99標准中,只有以下兩種定義方式是正確的:
int main(void)
int main(int argc,char*argv[])
(參考資料:ISO/IEC 9899:1999(E)Programming languages—C 5.1.2.2.1 Program startup)
當然,我們也可以做一點小小的改動。例如:char*argv[]可以寫成char**argv;argv和argc可以改成別的變數名(如intval和charval),不過一定要符合變數的命名規則。
如果不需要從命令行中獲取參數,請用int main(void);否則請用int main(int argc,char*argv[])。
main函數的返回值類型必須是int,這樣返回值才能傳遞給程序的激活者(如操作系統)。
如果main函數的最後沒有寫return語句的話,C99規定編譯器要自動在生成的目標文件中(如exe文件)加入return 0;,表示程序正常退出。不過,我還是建議你最好在main函數的最後加上return語句,雖然沒有這個必要,但這是一個好的習慣。
注意,vc6不會在目標文件中加入return 0;,大概是因為vc6是98年的產品,所以才不支持這個特性。現在明白我為什麼建議你最好加上return語句了吧!不過,gcc3.2(Linux下的C編譯器)會在生成的目標文件中加入return 0;。
2、C++
C++98中定義了如下兩種main函數的定義方式:
int main()
int main(int argc,char*argv[])
(參考資料:ISO/IEC 14882(1998-9-01)Programming languages—C++3.6 Start and termination)
int main()等同於C99中的int main(void);int main(int argc,char*argv[])的用法也和C99中定義的一樣。同樣,main函數的返回值類型也必須是int。
如果main函數的末尾沒寫return語句,C++98規定編譯器要自動在生成的目標文件中加入return 0;。同樣,vc6也不支持這個特性,但是g++3.2(Linux下的C++編譯器)支持。
3、關於void main
在C和C++中,不接收任何參數也不返回任何信息的函數原型為「void foo(void);」。可能正是因為這個,所以很多人都誤認為如果不需要程序返回值時可以把main函數定義成void main(void)。然而這是錯誤的!main函數的返回值應該定義為int類型,C和C++標准中都是這樣規定的。
雖然在一些編譯器中,void main可以通過編譯(如vc6),但並非所有編譯器都支持void main,因為標准中從來沒有定義過void main。
g++3.2中如果main函數的返回值不是int類型,就根本通不過編譯。而gcc3.2則會發出警告。所以,如果你想你的程序擁有很好的可移植性,請一定要用int main。
4、返回值的作用
main函數的返回值用於說明程序的退出狀態。如果返回0,則代表程序正常退出,否則代表程序異常退出。下面我們在winxp環境下做一個小實驗。首先編譯下面的程序:
int main(void)
{
return 0;
}
然後打開附件里的「命令提示符」,在命令行里運行剛才編譯好的可執行文件,然後輸入「echo%ERRORLEVEL%」,回車,就可以看到程序的返回值為0。
假設剛才編譯好的文件是a.exe,如果輸入「a&&dir」,則會列出當前目錄下的文件夾和文件。但是如果改成「return-1」,或者別的非0值,重新編譯後輸入「a&&dir」,則dir不會執行。
因為&&的含義是:如果&&前面的程序正常退出,則繼續執行&&後面的程序,否則不執行。也就是說,利用程序的返回值,我們可以控制要不要執行下一個程序。這就是int main的好處。
如果你有興趣,也可以把main函數的返回值類型改成非int類型(如float),重新編譯後執行「a&&dir」,看看會出現什麼情況,想想為什麼會出現那樣的情況。順便提一下,如果輸入a||dir的話,則表示如果a異常退出,則執行dir。
6. c語言動態數組是如何建立和使用的
動態數組,用指針和malloc()函數建立,用realloc()動態調整大小,最後用free()釋放內存。引用與數組一樣。
7. C語言如何定義動態數組
intmain(void)
{
int*number,n,m,i;
printf("thetotalnumbersis:");
scanf("%d",&n);
printf("backm:");
scanf("%d",&m);
number=(int*)malloc(n*sizeof(int));
printf("input%dintegers:",n);
for(i=0;i<n;i++)
{
scanf("%d",&number[i]);
}
(7)C語言函數如何調用動態數組擴展閱讀
動態數組,是相對於靜態數組而言。靜態數組的長度是預先定義好的,在整個程序中,一旦給定大小後就無法改變。而動態數組則不然,它可以隨程序需要而重新指定大小。
動態數組的內存空間是從堆(heap)上分配(即動態分配)的。是通過執行代碼而為其分配存儲空間。當程序執行到這些語句時,才為其分配。程序員自己負責釋放內存。使用動態數組的優點是可以根據用戶需要,有效利用存儲空間。
8. c語言函數怎麼調用數組部分
一、數組可定義為全局變數,函數直接調用。
二、數組可定義為局部變數,再通過參數傳遞到函數中調用(實參傳數組名,表示數組首地址,也可通過指針或數組名+數字來傳遞數組局部地址)。
三、main函數想要調用函數返回的數組,可用static定義靜態變數或malloc定義動態數組(字元串常量也可返回使用,但局部變數,在函數調用結束會被釋放,不能作為返回地址使用)。
下面是演示代碼:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char str1[]="我是全局變數數組";
char *fun0(char str2[]);
char *fun1();
char *fun2();
int main()
{
char *str3=NULL,*str4=NULL,*str5=NULL;
char str2[]="我是main函數的局部數組變數";
str3=fun0(str2);
printf("str3:%s,fun函數調用結束,我的地址依然可以使用 ",str3);
str4=fun1();
printf("str4:%s,fun函數調用結束,我的地址依然可以使用 ",str4);
str5=fun2();
printf("str5:%s,fun函數調用結束,函數結束不會自動釋放 ",str5);
free(str5);
return 0;
}
char *fun0(char s[])
{
static char str3[]="我是fun函數申明的靜態數組變數";
printf("str1:%s,fun函數可以直接調用 ",str1);
printf("str2:%s,fun函數通過參數將我的地址傳進來 ",s);
return str3;
}
char *fun1()
{
char *str4="我是fun1函數的字元串常量";
return str4;
}
char *fun2()
{
int len;
char sTemp[]="這是一個臨時數組,之後用於給mallc申請的地址傳值,傳遞內容為:(我是fun函數通過mallic申請的數組)";
char *str5=NULL;
len=strlen(sTemp+63);
str5=(char *)malloc(sizeof(char)*len+1);
if(!str5)return NULL;
strcpy(str5,sTemp+63);
str5[len-2]=0;
return str5;
}
9. c語言中用函數調用,用動態分配方式,把字元數組輸出。
#include
<stdio.h>
#include
<string.h>
#include
<malloc.h>
using
namespace
std;
void
display(char
*str){
for(int
i
=
0
;
i
<
strlen(str)
;
i++)
{
printf("%c"
,
str[i])
;
}
printf("\n");
}
void
getChar(char
*str){
scanf("%s"
,
str)
;
}
int
main(){
int
len
=
128
;
char
*str
=
(char
*)malloc(len
*
sizeof(char))
;
while(true){
printf("請輸入一些字元:");
getChar(str)
;
printf("您輸入的字元為:");
display(str)
;
printf("\n");
}
}