1. 程式人生 > >指針系統學習7-返回指針值的函數

指針系統學習7-返回指針值的函數

opened 長度 函數 gin 兩個 字符值 指針的指針 操作 code

1.返回指針值的函數

一個函數可以帶回一個整型值、字符值、實型值等,也可以帶回指針型的數據,即地址。其概念與以前類似,只是帶回的值的類型是指針類型而已。

這種帶回指針值的函數,一般定義形式為

類型名 *函數名(參數表列);

例如:
int *a(int x,int y);

例題:有若幹個學生的成績(每個學生有4門課程),要求在用戶輸入學生序號以後,能輸出該學生的全部成績。用指針函數來實現。

技術分享圖片
#include <stdio.h>

void main()
{
      double score[][4] = {{60.0, 70.0, 80.5, 90.5}, {56.0, 89.0
, 67.0, 88.0}, {34.2, 78.5, 90.5, 66.0}}; double *search(double(*pointer)[4], int n); double *p; int i, m; printf("Please enter the number of student: "); scanf("%d", &m); printf("The scores of No.%d are: \n", m); p = search(score, m); for( i=0; i < 4
; i++) { printf("%5.2f\t", *(p + i)); } printf("\n\n\n"); } double *search(double (*pointer)[4], int n) { double *pt; pt = *(pointer + n); return pt; }
View Code

2.指針函數和函數指針的區別

這兩個概念都是簡稱:

  指針函數是指帶指針的函數,即本質是一個函數。

  函數指針是指向函數的指針變量,因而函數指針本身首先應是指針變量,只不過該指針變量指向函數。

3.指針數組和指向指針的指針

  指針數組的概念:一個數組,若其元素均為指針類型數據,稱為指針數組,也就是說,指針數組中的每一個元素都相當於一個指針變量。

  一維指針數組的定義形式為:類型名 數組名[數組長度];
  例如: int *name[4];

從實例來認識:

#include <stdio.h>

void main()
{
      int a[5] = {1, 3, 5, 7, 9};
      int *name[5] = {&a[0], &a[1], &a[2], &a[3], &a[4]};
      int i;

      for( i=0; i < 5; i++ )
      {
            printf("%d   ", *name[i]);
      }
      printf("\n\n");
}

例題:

將下邊字符串按字母順序(由小到大)輸出。char *name[]={"Fishc.com", "www.fishc.com", "home.fishc.com","fuck you!","Thank you!"};

提示:
  一,我們可以聲明一個數組指針來指向;
  二,將排序利用strcmp()函數來解決;
  三,各個功能抽象為函數或文件。

字符串在內存中:技術分享圖片

我們可以聲明數組指針:技術分享圖片

技術分享圖片
#include <stdio.h>
#include <string.h>

void main()
{
      void sort(char *name[], int n);
      void print(char *name[], int n);

      char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
      int n = 4;

      sort(name, n);
      print(name, n);
}

void sort(char *name[], int n)
{
      char *temp;
      int i, j, k;

      for( i=0; i < n-1; i++ )
      {
            k = i;

            for( j=i+1; j < n; j++ )
            {
                  if( strcmp(name[k], name[j]) > 0 )
                  {
                        k = j;
                  }
                  if( k != i )
                  {
                        temp = name[i];
                        name[i] = name[k];
                        name[k] = temp;
                  }
            }
      }
}

void print(char *name[], int n)
{
      int i;
     
      for( i=0; i < n; i++ )
      {
            printf("%s\n", name[i]);
      }
}
View Code

4.指向指針的指針

  怎樣定義一個指向指針數據的指針變量呢? 形式可以如: char **p;

  p的前面有兩個*號。*運算符的結合性是從右到左,因此**p相當於*(*p),顯然*p是指針變量的定義形式。如果沒有最前面的*,那就是定義了一個指向字符數據的指針變量。

  現在它前面又有一個*號,表示指針變量p是指向一個字符指針變量的。*p就是p所指向的另一個指針變量。

從實例來認識:

#include <stdio.h>

void main()
{
      char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
      char **p;
      int i;

      for( i=0; i < 4; i++ )
      {
            p = name + i;
            printf("%s\n", **p);
      }
}

5.指針數組作main函數的形參

  指針數組的一個重要應用是作為main函數的形參。在以往的程序中,main函數的第一行一般寫成以下形式:void main()

  括弧中是空的。實際上,main函數可以有參數。例如:void main(int argc,char *argv[ ])

  argc和argv就是main函數的形參。main函數是由操作系統調用的。那麽,main函數的形參的值從何處得到呢?

  顯然不可能在程序中得到。實際上實參是和命令一起給出的。也就是在一個命令行中包括命令名和需要傳給main函數的參數。

  命令行的一般形式為: 命令名 參數1 參數2……參數n


從實例來認識:

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

void main (int argc, char *argv[])
{
      int i;

      printf ("the number of string is : %d\n", argc-1);

      for(i=1; i < argc; i++)
      {
            printf ("the string %d is : %s\n", i, argv[i]);
      }
}

運行方式(運行生成的exe文件):技術分享圖片



指針系統學習7-返回指針值的函數