指針數組與帶參main函數

来源:https://www.cnblogs.com/xtuxiongda/archive/2018/01/14/8284653.html
-Advertisement-
Play Games

(一)指針數組 指針數組就是每一個元素存放一個地址,相當於一個指針變數。如:int *p[4]指針數組比較適合用來指向若幹字元串,使得處理字元串更加靈活。例如,現在要將若幹字元串按字母順序由小到大輸出 通過上例子,試比較if(strcmp(name[k],name[j])>0)和if(strcmp( ...


(一)指針數組

指針數組就是每一個元素存放一個地址,相當於一個指針變數。
如:int *p[4]
指針數組比較適合用來指向若幹字元串,使得處理字元串更加靈活。
例如,現在要將若幹字元串按字母順序由小到大輸出

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main(){
 4     void sort(char *name[],int n);
 5     void print(char *name[],int n);
 6     char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
 7     
 8     int n=5;
 9     sort(name,n);
10     print(name,n);
11     return 0;
12 }
13 
14 void sort(char *name[],int n)   //對字元串排序 
15 {
16     char *temp;
17     int i,j,k;
18     for(i=0;i<n-1;i++){
19         k=i;
20         for(j=i+1;j<n;j++)
21          if(strcmp(name[k],name[j])>0) k=j; 
22          if(k!=i){
23              temp=name[i];name[i]=name[k];name[k]=temp;  //將指向第i個字元串的數組元素的值與指向第k個字元串數組元素的值對換 
24          }
25     }
26  }
27  
28  void print(char *name[],int n){   //輸出字元串 
29      int i;
30      for(i=0;i<n;i++)
31       printf("%s\n",name[i]);
32  } 

通過上例子,試比較
if(strcmp(name[k],name[j])>0)和if(strcmp(*name[k],*name[j])>0)的區別:
if(strcmp(name[k],name[j])>0)是從頭到尾一次比較字元串中的元素
而if(strcmp(*name[k],*name[j])>0)只比較指向字元串中的首元素
附:strcmp只是單純的按照ascii碼大小從頭到尾比較,而stricmp則不區分大小寫

(二)指向指針的指針

指向指針數據的指針變數 char **p;
指針數組的元素可以指向字元串,也可以指向整型數據或者實型數據
指向字元串的小例子

 1 #include<stdio.h>
 2 int main(){
 3     char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
 4     char **p;
 5     int i;
 6     for(i=0;i<5;i++){
 7         p=name+i;    //先使p指向name數組的name[0],*p是name[0]的值,即第一個字元串首字元的地址,依次輸出5個字元串 
 8         printf("%s\n",*p);
 9     } 
10 }

指向整型數據的小例子

 1 #include<stdio.h>
 2 int main(){
 3     int a[5]={1,3,5,7,9};
 4     int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
 5     int **p,i;
 6     p=num;
 7     for(i=0;i<5;i++){
 8         printf("%d ",**p);  //p是&num[0],*p是num[0]的值,即a[0],**p是a[0]的值 
 9         p++;
10     }
11 } 

利用指針變數訪問另一變數稱為間接訪問
指向指針數據的指針用的就是二級間址,說通俗點就是通過兩個地址訪問一個變數,當通過多個(大於2)地址訪問變數時,就稱為多重指針

(三)指針數組作main函數形參

帶參數的main函數原型:
int main(int argc, char *argv[ ] );


argc和argv是main函數的形參,它們是程式的命令行參數。argc指參數的個數,argv指參數向量,其中每一個元素指向命令行中的一個字元串。
main函數是操作系統調用的,所以實參只能由操作系統給出。在操作命令的狀態下,實參是和執行文件的命令一起給出的。命令行中包括命令名和要傳給main函數的參數


舉個例子, $./echo computer and tom
echo是命令名,computer等是參數,此例子中argc為4,因為命令名也算其中一個參數


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要的編程範式有三種:命令式編程,聲明式編程和函數式編程。 命令式編程: 命令式編程的主要思想是關註電腦執行的步驟,即一步一步告訴電腦先做什麼再做什麼。 比如:如果你想在一個數字集合 collection(變數名) 中篩選大於 5 的數字,你需要這樣告訴電腦: 第一步,創建一個存儲結果的集合變 ...
  • 做了一個查詢天氣的小腳本,使用的是中華萬年曆的天氣API介面:url = r'http://wthrcdn.etouch.cn/weather_mini?citykey=101280101 首先是導入城市數據,根據輸入的城市名稱,查到city_code,這裡我從網上找了個城市代碼的文件。 用pick ...
  • 1. 相對於java,scala的值修飾用val,變數修飾用var.值相當於java的final 修飾了。package demoobject ScalaBase extends App { println(1) println(1 + 1) println("Hello!") println("H... ...
  • 100行代碼實現跳一跳輔助程式 寫在前面 好久沒寫博客了,今天來一發吧。分享一下今天下午用python寫的“跳一跳”小游戲的輔助程式。之前是準備用樹莓派操控一個“機械手指”來代替人的觸摸操作,但該方案還在醞釀中,實現了再分享。接下來要分享的是用“純軟體”的方法來玩“跳一跳”。 原理 原理其實很簡單, ...
  • 有很多學習C語言或者C++的朋友可能寫過貪吃蛇的作業,我也是其中之一。在最開始寫的時候自己水平很差,寫出的效果還不如許多同學從網上抄的。 這一系列博客都是使用C語言寫貪吃蛇,逐步提升難度,當然自己也好久不動手了,也算是自己複習一次C語言。 第一個貪吃蛇,因為許多剛學完C的同學並不瞭解太多東西,所以我 ...
  • 很多人喜歡逛油管看視頻,自然就會有一些喜歡的收藏集或者視頻作者,有時候想要下載下來保存在本地播放,這樣的話就不用每次FQ,畢竟有些代理的速度並不是很理想(如果你的代理速度炒雞快的話,請忽略這篇文章)。 當你想下載油管視頻,又覺得一些下載網站或者工具無法滿足你的要求的時候,比如我想定製下載的清晰度,我 ...
  • "如何處理 Python 入門難以進步的現象?" "Python 練習冊,每天一個小程式" " Python之美[從菜鳥到高手" " Python實戰" "Python 的練手項目有哪些值得推薦?" "廖雪峰實戰" "菜鳥教程實例(3.3)" "菜鳥教程100例(2.7)" PS :找的一些學習的東 ...
  • 一、重構簡單的CRUD 1.JDBC工具類 1.因為在crud中都包含一些相同的代碼所以可以提取出來,抽取代碼重構為工具類。 2.將工具類設置為static靜態類,方便調用,不需要new對象。 二、使用預編譯sql語句 1.預編譯sql語句的好處 1.效率高,預編譯對象把一些格式固定的SQL編譯後, ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...