多语言展示
当前在线:1924今日阅读:103今日分享:49

Linux编程之C语言5

Linux编程之C语言5
工具/原料
1

Ubuntu,VMware

2

Linux

方法/步骤
1

一:多维数组 一维数组有相同类型的元素组成的数组   int  arr[10] ;  数组arr是由10个int类型的数据组成,元素是int类型的 多维数组     由数组组成的数组二维数组:最基本的类型  数组名[ 一维数组的个数 ]  [ 一维数组中元素的个数  ]; 如:  int   double_arr [3][4] ; 二维数组double_arr是由3个一维数组组成,每个一维数组由4个int类型的元素组成 三维数组:最基本的类型  数组名[ 二维数组的个数 ][ 一维数组的个数 ]  [ 一维数组中元素的个数  ];如:  int   tri_arr [ 3][4][5] ;三维数组tri_arr 是由3个二维数组组成,每个二维数组由4个一维数组组成,每个一维数组由5个int类型的元素组成

2

1)二维数组中的定义(1)int   double_arr [3][4] ;(2)在定义时候赋初始值int  double_arr [3][4] = { { 11,12,13,14},{ 22,23,24,25} ,{34,35,36,37} } ;     int  double_arr [3][4] = { 11,12,13,14 , 22,23,24,25 ,34,35,36,37 } ;      只要对部分元素进行赋值,其它元素值自动为0     int  double_arr [3][4] = { { 11,12, },{ 22,23,24,25} ,{34,35,36,37} } ;等价于 { { 11,12 , 0 ,0 },{ 22, 23, 24, 25} ,{34, 35, 36,37} } ;  int  double_arr [3][4] = { 11,12,22 , 23, 24 ,25 ,34,35,36,37 } ;等价于 { { 11,12 , 22,23 },{ 24, 25,34, 35} ,{36,37,0, 0} } ;  int  double_arr [3][4] =  {0}; (3) 缺省元素个数的定义法 (二维数组的元素是一维数组, 所以缺省的是一维数组的个数)int   arr [ ] = {11,2,3,45} ;int  double_arr [   ] [4 ] = {11,22,33,44,55,66,77,88};等价于int  double_arr [ 2 ] [4 ]= {{11,22,33,44},{55,66,77,88}}int  double_arr [   ] [4 ] = {11,22,33,44,55,66,77,88,99};等价于int  double_arr [ 3] [4 ]= { {11,22,33,44},{55,66,77,88},{99, 0, 0 , 0}} ;  练习: 定义一个二维数组arr[3][2] ,二维数组的值由键盘输入在二维数组中找到最小值,2个for循环, 对3个一维数组中的2个元素  练习:计算arr[3][2] 的二维数组中全部元素之和

3

int  a[3] ;一维数组名a通常情况下表示首元素的地址   a ===== &a[0]例外    &a  表示整个一维数组的地址sizeof(a)  得到整个一维数组的大小  int   arr[3][4] ;二维数组的数组名 arr 通常情况下表示第一个一维数组的地址arr  ======   &arr[0]是int (*)[4]类型 整个一维数组的地址 &arr  表示整个二维数组的地址sizeof(arr)  得到整个二维数组的大小  该二维数组由3个一维数组组成, 这3个一维数组的名字依次为arr[0]  arr[1]  arr[2]其中 arr[0] =======   &arr[0][0] arr[1] =======   &arr[1][0] arr[2] =======   &arr[2][0]  都是int 类型的地址

4

二:指针数组 由指针组成的数组数组的元素是指针(地址值+类型)   指针的类型 *  数组名[元素个数];如  int   *  p_arr[4] ; 思考1: 有二维数组int  d_arr[3][4]; 定义一个指针数组,分别指向该二维数组中的每个一维数组的首元素int  * p_arr[3] = { &d_arr[0][0] ,   &d_arr[1][0] , &d_arr[2][0] };也可以写成int  * p_arr[3] = { d_arr[0] ,  d_arr[1] , d_arr[2] };练习:通过指针数组名p_arr打印出每个元素的值p_arr[0]  ====  地址 &d_arr[0][0]*(p_arr[0]) ====  d_arr[0][0]值*(p_arr[0]+1i )====  d_arr[0][1]值*(p_arr[0]+2 )====  d_arr[0][2]值*(p_arr[0]+3 )====  d_arr[0][3]值 *(p_arr[1]) ====  d_arr[1][0]值 *(p_arr[2]) ====  d_arr[2][0]值  思考2:有3个字符串,  char ch1[ ] =“hello”;            char ch2[ ] =“world”;                char ch3[ ] =“appletree”能不能定义一个指针数组 分别指向它们?   char  *  p [3] =  { ch1, ch2 ,ch3 }             使用的时候 直接使用数组名p或者是使用它的下标p[0]、p[1]、p[2]使用字符指针数组方便对字符串的管理

5

三:数组指针指向数组的指针 int * p是指向int的指针int arr[5] ;  &arr就表示整个数组的地址 数组指针的定义:        类型   ( * 指针变量名)[ 元素的个数 ]int   (*p) [3 ] ; 表示指向由3个int类型元素组成的数组的指针p 如 : int arr[3]  = {11 ,12,33};int  ( *p) [3] = &arr ;                               // int  a  = 100;p === &arr   整个一维数组的地址   *p ==== arr*p ==== *(&arr) === arr  === &arr[0]  首元素地址*(*p)  === * arr  ====*(&arr[0]) ===== arr[0]  == = 11 首元素值 *(*p +1)  === * (arr+1)  ====*(&arr[1]) ===== arr[1]  == = 12 元素值       for(i=0;  i<3 ; i++)printf(“%d” , *(*p +i)   ) ;====》   (*p) [ i ]

6

多级指针存放指针变量地址的指针 int  a;int *  p  = &a ;  一级指针变量pint **  q =  &p ;    二级指针变量q 只能存一级指针变量的地址int ***  x =  &q ;        三级指针变量q 只能存二级指针变量的地址 int  ***   x  =  NULL;  这时候是不能直接解引用,否则就段错误 x =====  &q*x  ===== *(&q)  ===== q ===== &p**x =======*q =====  *(&p) ==== p***x ====== *p=======*(&a) ===== a定义和解引用相对应

7

指针函数返回值为指针类型的函数如     char *strcpy(char *dest, const char *src);   函数指针指向函数的指针int   max_func (int x, int y){return x>y? x :y;}  函数指针的定义 :要强调是指针,指向的是个函数函数的返回值(*p)(   函数形参类型列表   )          ;如  int  (*p) (  int ,  int ) = max_func( );定义了一个函数指针p, 指向的是max_func这个函数  int  (*p) (  int ,  int );定义了一个函数指针变量p, 指向的函数是返回值为int , 形参由两个int类型的数据组成                                           p  = max_func( ) ; //  也可以    p  = &max_func( ) ;   &此时可以省去 通常函数指针是用在回调函数中的可以通过函数指针来进行函数的调用如  int val  =  p (100, 200);函数指针的使用:int  add_func( int a, int b) ;int  dec_func( int a, int b) ; main( ){  int  (*p) (  int ,  int );  // 定义了一个函数指针  scanf(“%d”,   &mode);  if(mode == 1)p = add_func( ) ;.//  给函数指针赋值  elsep = dec_func( ) ; scanf(“%d %d”, &a , &b)p(a,  b);   // 调用函数指针所对应的函数}   函数指针数组由函数指针所组成的数组 一个由10个函数指针所组成的数组, 每个函数指针指向的函数有一个整型参数并返回一个整型数 int ( *  arr[10]  )   ( int ) int  *  arr[10] ( int )  实验5--3a)  int   a ;b)  int  * a ;c) 二级指针 int  **  a;d)  int  a[10];e) 指针数组    int * a[10]f) 数组指针(强调)    int  (* a) [10]g) 函数指针 (强调)          int (*a)(int)h) 函数指针数组     int ( *  arr[10]  )   ( int )

8

作业:分别用数组下标、数组指针、指针数组 完成以下练习  1:  定义一个二维数组,并判断其中是否有马鞍数 ,如果有则把对应的下标和值都打印出来马鞍数:在一行中最小, 但是在一列中最大11  22  439    8   62   34   56  中的 11  2: 定义一个可变M*M二维数组,算对角线上的所有元素之和

9

补充图:去重字符

注意事项
1

“经验是茶,需要您去品!”如果您认为我写得还不错,请在页面上点击“红心”支持我,点击“月票投票”投我一票,如果您有疑问,请在页面下方评论框中指出,谢谢。

推荐信息