Linux编程之c语言数组

2025-10-22 12:31:11

1、一:数组的定义:

方法一:

Linux编程之c语言数组

2、方法二:

Linux编程之c语言数组

3、方法三:

Linux编程之c语言数组

4、二:数组的使用

方法一:

Linux编程之c语言数组

Linux编程之c语言数组

Linux编程之c语言数组

Linux编程之c语言数组

5、方法二:

Linux编程之c语言数组

6、三 : 可变数组

      在编译程序的时候, 还不知道数组的元素个数,但是是确定数组类型和数组名,此时不能给可变数组赋初值;

      直到程序运行到代码定义数组的语句之前,元素的个数才被确定下来

         int length ;

         scanf("%d", &length);   在运行到可变数组定义前,必须得到数组的元素个数

         int array[length] ;// order~

7、四: 字符数组

  由char 类型的数据组成的数组

  char  arr[10] ;

  char  arr[10] = “hello”;

  char  arr[10] = {‘h’, ’e’, ’l’, ’l’, ’o’, ‘\0’ , 0, 0, 0, 0} ;

  char  array[10] = {‘h’, ’e’, ’l’, ’l’, ’o’, ‘a’ , ‘b’, ‘c’, ‘d’, ‘e’} ; // 定义是没有问题的,

这个array不适合当成字符串来做操作了,一般是逐个元素的访问

                  {1,2,3,4,5,6,7,8,9,10};

‘\0’是“ ”自带的, 通常我们需要对字符数组进行整体操作的时候, 会用上’\0’

我们通常习惯字符串后面的自带’\0’

     char a[  ] = “hello” ;  这个字符数组一共占用了6个  ‘h’, ’e’, ’l’, ’l’, ’o’, ‘\0’

 char a[  ] = {‘h’, ’e’, ’l’, ’l’, ’o’} ;   这个字符数组一共占用了5个

练习: 使用键盘给字符数组赋值%s,且把每个字符数组的元素都用%c逐个打印出来,

需要用空格隔开

                  char  arr[100]; // random

                  int i;

                  scanf("%s" , arr) ;//scanf("%s", &arr[0])

//     for(i=0; i<100 ; i++)

         for(i=0; arr[i]!='\0' ;i++)// 类似%s  只要在内存中遇到了’\0’就停止打印

         {

                  printf("%c", arr[i]); // 只会显示有效字符

         }

  

scanf("%s" , arr);

              等价于scanf("%s" , &arr[0]);

               把键盘缓冲区中的字符依次放在数组arr的首元素开始的空间,

直到遇到空格或者换行符停止, 同时增加一个"\0"

               如果要输入带空格的字符串,可以用scanf(“%[^\n]” ,  arr);

或者是  fgets(arr , 100 , stdin);

                             

scanf("%c" , &arr[0]);

              只是放置一个字符到首元素地址

printf("%s" , arr);

等价于printf("%s" , &arr[0]);

    从地址&arr[0]开始逐个取字符并打印,遇到了‘\0’就停止打印

printf("%c" , arr[i])

打印对应的一个字符

sizeof(arr)  表示整个数组的占用空间字节数

strlen(arr)  函数,可以返回数组的有效字符数,也就是基于arr到‘\0’为止

练习:从键盘输入一个可变长度字符串, 统计这个字符串中小写字母的个数

且把每个小写字母都打印出来

参考 var_array.c 定义可变长度字符串

char_array3.c

******************

字符数组  %c通过下标逐个操作元素, 

%s是访问数组名,基于首元素地址开始操作数组

******************

错误~:

char_array3.c:13:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int *’ [-Wformat=]

‘%s’这个格式需要的类型是char *(char类型数据的地址),但是第二个参数是int类型数据的地址

8、扩展:

五:函数 function

1)函数的定义:

函数的作用域 函数的返回值  函数名( 形参类别及形参名列表 )

{

   具体的功能实现

}

int  func1(  char  a  )

{  ...........

return  -1;

}

func1的返回值是int 类型的,调用的时候需要给一个char类型的数

int  func2(  int x  ,  int  y  )

{  ...........

return  2;

}

func2的返回值是int 类型的,调用的时候需要给2个int类型的数

int  func3( void )

{  ...........

return  1;

}

func3的返回值是int 类型的,调用的时候不需要给参数

void  func4( int a )

{  ...........

return ;

}

func4是没有返回值,调用的时候需要给1个int类型的数

2)函数的调用:

在某个函数中调用函数, 调用的时候需要注意函数的格式(返回值、参数)

    func1( ‘a’ ) ;  如果在调用的时候觉得不需要使用函数的返回值, 可以不处理

    i = func2(  a  , b );  把a和b变量的值传递给函数,函数的返回值赋值给 i

int  ret = func3(  );  函数不需要形参,直接使用函数的返回值

func4 ( 10 ); 直接给函数传递一个常量值10

练习: 定义一个函数, 可以返回3个参数中的最大值

      编程验证效果

有返回值, 有3个参数

max_func.c:15:8: warning: implicit declaration of function ‘max_func’ [-Wimplicit-function-declaration]

 1: 因为函数没有事先声明

 2: 定义和调用的函数名或者参数的个数不一致

3)函数的声明:

因为编译器是从上往下进行编译的, 当编译到某个没有实现定义的函数时候会给一个警告, 需要在.c文件的开头增加函数的声明

int max_func(int a, int b , int c); 声明和定义差不多,但是后面跟的是分号

也可以忽略参数名,只保留参数的类型

int max_func(int  , int   , int  );

 

4)字符串函数的使用

    字符串相关的函数声明基本都放在#include <string.h>, 定义都在系统库文件中

函数是由“巨人”写好的~

这类函数不需要关心里面的实现, 但是得根据它的描述充分理解它的功能,并且调用

       #include <string.h>

       size_t   strlen(const char *s);  

给一个字符串名,返回数组的有效字符数, 遇到’\0’就停止

int strcmp(const char *s1, const char *s2);  

比较两个字符串,返回值为0表示字符串完全相同

int strncmp(const char *s1, const char *s2, size_t n);

比较两个字符串的指定长度,

返回值为0表示字符串指定长度完全相同

strcat

strtok

strstr

作业:

1: 自己写一个函数, 对应的功能和strlen()函数一致

       返回值是长整型

参考char_array2.c

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:55
  • 阅读量:180
  • 阅读量:115
  • 阅读量:83
  • 阅读量:105
  • 猜你喜欢