㈠ 聲明一個指向數組大小為10的指針,數組中的元素為返回值類型為整型指針的函數; 如何定義該指針
int (*(*p)[10])(int *)
首先題目說要聲明一個數組指針, 一般我們想到的數組指針是 隨便來一個 int(*p)[10], 然後又說每個元素是內一個函數指針,那麼容我們便來一個 函數指針 int (*pf)(int *) . 然後把(*p)[10]作為一個整體替代 pf 即 int(*(*p)[10]))(int *); 分析: 判斷一個復雜式子看最高優先順序的,*p是一個指針,然後(*p)外面是[],所以是數組指針,(*p)[10])描述完畢,然後再看外面int(*)(int *)很明顯,這是一個函數指針,所以這個數組中每個元素是函數指針
㈡ 為什麼c語言中自定義一個整形函數沒有返回值依然能運
在C中,正常情況下,我們只能從函數中返回一個值。但在有些情況下,我們需要從函數中返回多個值,此時使用數組或指針能夠很好地完成這樣的任務。這里是一
個示例,這個程序使用一個整型數組作為參數,並將數組元素的和與積返回給調用函數。下面是C代碼,這是一種常見情況。下面給出實現技巧:
1.
#include
2.
#include
3. int*
Pool(int array[],int size)
4.
{
5.
int *x;
6.
int i=0;
7.
int
a[2]={0,1};
8.
for(i=0;i
9.
{
10.
a[0]+=array[i];
// 存儲數組元素值的和
11.
a[1]*=array[i];
// 存儲數組元素值的積
12.
}
13. //
將數組的基地址賦值給整型指針
14.
x=&a[0];
15. //
返回整個數組
16.
return x;
17. }
18.
19. int main()
20. {
21. int
a[]={1,2,3,4};
22. int
*c; c = Pool(a,4);
23.
printf("Sum = %d\nProct = %d\n",c[0],c[1]);
24.
getch();
25.
return 0;
26. }
這樣,我們就知道如何使用數組和指針從C函數中返回多個值。在很多情況下你會發現這個技巧很有用。
㈢ C語言數組怎麼返回自定義函數
//一、由函數參數帶回固定的二維數組
void func(int ppout[][2])
{
ppout[0][0] = 1;
ppout[0][1] = 2;
ppout[1][0] = 3;
ppout[1][1] = 4;
}
int _tmain(int argc, _TCHAR* argv[])
{
int pp[2][2];
func(pp);
cout << pp[0][0] << pp[0][1] << endl;
cout << pp[1][0] << pp[1][1] << endl;
system("pause"); //讓窗口暫停,便於看結果
return 0;
}
//二、由函數參數帶回動態二維數組
void func(int** pp, int rows, int columns)
{
int i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
pp[i][j] = (i + 1) * 10 + j + 1;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int rows = 3, columns = 2;
int** pp;
int i, j;
//申請內存
pp = new int*[rows];
for (j = 0; j < rows; j++)
pp[j] = new int[columns];
func(pp, rows, columns);
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
cout << pp[i][j] << " ";
}
cout << endl;
}
//釋放內存
for (j = 0; j < rows; j++)
delete[] pp[j];
delete[] pp;
system("pause"); //讓窗口暫停,便於看結果
return 0;
}
//如果非要從函數的返回值中帶回二維數組,這是最好的方式
//三、由函數帶回動態二維數組
int** func(int rows, int columns)
{
int i, j;
int** pp;
//申請內存
pp = new int*[rows];
for (j = 0; j < rows; j++)
pp[j] = new int[columns];
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
pp[i][j] = (i + 1) * 10 + j + 1;
}
}
return pp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int rows = 3, columns = 2;
int** pp;
int i, j;
pp = func(rows, columns);
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
cout << pp[i][j] << " ";
}
cout << endl;
}
//釋放內存
for (j = 0; j < rows; j++)
delete[] pp[j];
delete[] pp;
system("pause"); //讓窗口暫停,便於看結果
return 0;
}
//四、由函數帶回二維數組
//這種方式有問題,程序中已經說明,不要採取此方式
const int rows = 3, columns = 2;
int (*func())[columns]
{
int i, j;
static int pp[rows][columns]; //如果不是靜態的,函數退出後其內存就變得無效。
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
pp[i][j] = (i + 1) * 10 + j + 1;
}
}
return pp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int (*pp)[columns];
int i, j;
//pp = new (int[columns]*)[rows];
pp = func();
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
cout << pp[i][j] << " ";
}
cout << endl;
}
system("pause"); //讓窗口暫停,便於看結果
return 0;
}
㈣ C語言自定義函數返回一個數組的問題
方法1:利用全局變數
分析:全局變數作為C語言的一個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得並不是很多。由於全局變數的作用域是從定義變數開始直到程序結束,而對於編寫有多個返回值的C語言函數,我們可以考慮把要返回的多個值定義成全局變數。當函數被調用時,全局變數被更改,我們再把更改後的全局變數值應用於主調函數中。函數被調用後被更改後的全局變數值即為函數的數個返回值。下面以一個實例演示該方法的應用。
實例1:編寫函數求3個數中的最大值與最小值。
方法:把最大值、最小值分別定義成2個全局變數max、min,在用戶自定義函數中把求出來的最大值與最小值分別賦給全局變數max、min。函數調用完畢後全局變數的max、min值即保存了函數要求返回的值。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
int max,min;/*定義兩個全局變數用於保存函數返回值*/
void max_min(int a,int b,int c) /*定義求最大最小值的函數*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(min>b)min=b;
if(min>c)min=c;
}
main()
{int x,y,z;
printf(" 請輸入3個整數:\n");
scanf("%d,%d,%d",&x,&y,&z);
max_min(x,y,z) ;/*調用求最大值與最小值的函數*/
printf("三個數中的最大值為:%d;最小值為:%d",max,min);/*輸出最大值與最小值*/
getch();
}
調試結果如下:
請輸入3個整數:
5,-6,2
三個數中的最大值為:5;最小值為:-6
注意:該方法雖然可以實現有多個返回值的函數,但由於全局變數不能保證值的正確性(因為其作用域是全局,所以程序范圍內都可以修改它的值,如果出現錯誤將非常難以發現),並且全局變數增加了程序間模塊的耦合,所以該方法要慎用。
方法2:傳遞數組指針
分析:在教學過程中,我們知道C語言函數參數的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函數把實參的值復制給形參,形參獲得從主調函數傳遞過來的值運行函數。在值傳遞過程中被調函數參數值的更改不能導致實參值的更改。而如果是地址傳遞,由於傳遞過程中從實參傳遞過來的是地址,所以被調函數中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為數組元素定義成一個數組的形式,並使該數組的地址作為函數的形式參數,以傳址方式傳遞數組參數。函數被調用後,形參數組元素改變導致實參改變,我們再從改變後的實參數組元素中獲得函數的多個返回值。以下實例演示該方法的應用。
實例2:編寫函數求一維整形數組的最大值與最小值,並把最大值與最小值返回給主調函數。
方法:以指針方式傳遞該一維數組的地址,然後把數組的最大值與數組的第一個元素交換,把數組的最小值與最後一個元素交換。函數被調用完畢後,實參數組中的第一元素為數組的最大值,實參數組中最後一個元素為數組的最小值,從而實現返回數組的最大值與最小值的功能。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求數組最大值最小值的函數,傳遞數組指針*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用於交換位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr<*(ptr+i))/*最大值與第一個元素進行交換*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)>*(ptr+i))/*最小值與最後一個元素進行交換*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*調用最大最小值函數*/
main()
{
int A[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
調試結果如下:
請輸入6個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用於多個返回值的數據類型一致的情況。當返回值數據類型不一致時,不適用該方法。
㈤ C#里返回值為int類型數組的函數如何定義
int[] 實際上是一個類,它的基類是Array.實際上,所有的數組類型都是類,而且基類是Array.
int[] arr=new int[10],實際內上是創建了int[]這種類型的一個容對象,只是微軟為了讓大家習慣,就使用了類似C++的數組定義方式。
你的補充問題是不是這個意思:
arr = randques();
randques會返回一個int[]的數組
如果是這個意思的話,那麼答案就是肯定的,因為返回值和 arr是同一種數據類型:int[]
㈥ java數組在自定義函數中返回值
public Num(int n)是構造函數,沒有返回值。如果必須使用構造函數的話,可以考慮使用成員變數來保存和輸出數組的值。代碼如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Num {
List<Integer> list = new ArrayList<>();
public static void main(String[] args) throws Throwable{
try(Scanner s = new Scanner(System.in)) {
System.out.println("輸入個數");
int n = Integer.parseInt(s.nextLine());
Num li = new Num(n);
for(int i = 0; i < n; i++) {
s.nextLine();
System.out.println(li.list.get(i));
}
}
}
public Num(int n) {
for(int i = 0 ; i < n ; i++) {
list.add(n);
}
}
}
如果想使用函數的返回值來保存和輸出數組的值,那可以使用普通的帶有返回值的函數來實現。代碼如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Num {
public static void main(String[] args) throws Throwable{
try(Scanner s = new Scanner(System.in)) {
System.out.println("輸入個數");
int n = Integer.parseInt(s.nextLine());
Num li = new Num();
List<Integer> list = li.NumSave(n);
for(int i = 0; i < n; i++) {
s.nextLine();
System.out.println(list.get(i));
}
}
}
public List<Integer> NumSave(int n) {
List<Integer> list = new ArrayList<>();
for(int i = 0 ; i < n ; i++) {
list.add(n);
}
return list;
}
}
麻煩看一下是否好用。
㈦ c語言中函數能返回一個數組嗎
不能直接返回一個數組,但是可以用其他方式實現類似功能。
方法1:利用全局變數
分析:全局變數作為C語言的一個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得並不是很多。由於全局變數的作用域是從定義變數開始直到程序結束,而對於編寫有多個返回值的C語言函數,我們可以考慮把要返回的多個值定義成全局變數。當函數被調用時,全局變數被更改,我們再把更改後的全局變數值應用於主調函數中。函數被調用後被更改後的全局變數值即為函數的數個返回值。下面以一個實例演示該方法的應用。
實例1:編寫函數求3個數中的最大值與最小值。
方法:把最大值、最小值分別定義成2個全局變數max、min,在用戶自定義函數中把求出來的最大值與最小值分別賦給全局變數max、min。函數調用完畢後全局變數的max、min值即保存了函數要求返回的值。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
int max,min;/*定義兩個全局變數用於保存函數返回值*/
void max_min(int a,int b,int c) /*定義求最大最小值的函數*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(min>b)min=b;
if(min>c)min=c;
}
main()
{int x,y,z;
printf(" 請輸入3個整數:\n");
scanf("%d,%d,%d",&x,&y,&z);
max_min(x,y,z) ;/*調用求最大值與最小值的函數*/
printf("三個數中的最大值為:%d;最小值為:%d",max,min);/*輸出最大值與最小值*/
getch();
}
調試結果如下:
請輸入3個整數:
5,-6,2
三個數中的最大值為:5;最小值為:-6
注意:該方法雖然可以實現有多個返回值的函數,但由於全局變數不能保證值的正確性(因為其作用域是全局,所以程序范圍內都可以修改它的值,如果出現錯誤將非常難以發現),並且全局變數增加了程序間模塊的耦合,所以該方法要慎用。
方法2:傳遞數組指針
分析:在教學過程中,我們知道C語言函數參數的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函數把實參的值復制給形參,形參獲得從主調函數傳遞過來的值運行函數。在值傳遞過程中被調函數參數值的更改不能導致實參值的更改。而如果是地址傳遞,由於傳遞過程中從實參傳遞過來的是地址,所以被調函數中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為數組元素定義成一個數組的形式,並使該數組的地址作為函數的形式參數,以傳址方式傳遞數組參數。函數被調用後,形參數組元素改變導致實參改變,我們再從改變後的實參數組元素中獲得函數的多個返回值。以下實例演示該方法的應用。
實例2:編寫函數求一維整形數組的最大值與最小值,並把最大值與最小值返回給主調函數。
方法:以指針方式傳遞該一維數組的地址,然後把數組的最大值與數組的第一個元素交換,把數組的最小值與最後一個元素交換。函數被調用完畢後,實參數組中的第一元素為數組的最大值,實參數組中最後一個元素為數組的最小值,從而實現返回數組的最大值與最小值的功能。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求數組最大值最小值的函數,傳遞數組指針*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用於交換位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr<*(ptr+i))/*最大值與第一個元素進行交換*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)>*(ptr+i))/*最小值與最後一個元素進行交換*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*調用最大最小值函數*/
main()
{
int A[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
調試結果如下:
請輸入6個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用於多個返回值的數據類型一致的情況。當返回值數據類型不一致時,不適用該方法
㈧ C程序自定義函數數組返回值
不用返回,在子函數處理後,直接使用就可以了。數組和指針差不多。看看《C專家編程》,就有答案了,呵呵
㈨ c語言自定義的函數如何返回一個數組
#include<stdio.h>
main()
{
float change(float array[3][3]);
float a[3][3];
int i,j;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]);
change (a);
for (i=0;i<3;i++)
for (j=0;j<3;j++)
printf("%4d\n",a[i][j]);
}
float change(float array[3][3]) // 這里可以寫出 array[][3]
{
float c[3][3];
int m,n;
for(m=0;m<3;m++)
for(n=0;n<3;n++)
c[n][m]=array[m][n];
for(m=0;m<3;m++)
for(n=0;n<3;n++)
arry[m][n]=c[m][n]; //不想改變你的程序,所以在這里修改。這樣 arry在主函數中是可以訪問的。版。權。不用返回了。
}
㈩ 我想用調用函數返回一個數組,返回值那裡應該怎麼寫
返回數組是一復個很不制好的習慣,因為你無法真正的返回一個數組,而是返回一個指向數組首地址的指針。如果你真的需要一個數組應該這么做,
int func(int * array, int max);第1個參數是數組的首地址,比如你有int a[20], 那麼就傳a,不過必須先初始化,max表示你傳入的數組的長度,即函數中對數組的操作不能超過max,否則越界,返回值是實際有效的數組元素個數。