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

Linux编程之C语言基础4

Linux编程之C语言基础4
工具/原料
1

Ubuntu

2

Linux,VMware

方法/步骤
1

函数传参     int  min_func( int  a ,  int  b) //  函数的形参a、b在调用的时候,等价于a和b被赋值了 { return (a>b ? b : a );}      int  main ( void ){int x = 100;             ----- 实参int y = 200;             ----- 实参int min ;min = min_func ( x ,  y); -----在函数调用的时候用实际值的参数给函数的形参赋值            printf(“min = %d \n”,  min );}

2

在用数组做为形参的时候需要注意:     数组名作为形参可以有以下形式void func( char arr[ 256 ] )           void func( char arr[  ] )    函数的形参都只表示某数组的首元素地址 int  main(void){         char ch[256];func( ch ); // 数组名通常表示首元素的地址, 只有sizeof(ch)和&ch例外} void upper_case(char str[ ] )upper_case.c:6:39: warning: ‘sizeof’ on array function parameter ‘str’ will return size of ‘char *’ [-Wsizeof-array-argument]  printf("sizeof(str) = %ld \n", sizeof(str)); sizeof计算的是在函数形参中的额数组名, 实际计算的是sizeof(char *)也就是char类型数据的地址(64位机中地址是用64位(8B)来表示的)\ upper _case中的形参str, 虽然定义的时候写成数组的形式, 但是sizeof只会把它当做是同类型的地址。sizeof(str )得到的是在不同系统中的地址字节数, 32位机所有的地址值都用 32位(4B)表示, 64位机用64位(8B来表示一个地址值)因为数组传参一般使用数组名来传递参数,数组名仅表示首元素的地址, 所以不能直接用形参名来计算数组的长度通常要在函数中直到数组元素个数的时候,只能通过另一个形参来传递upper_case(char str[ ]  , int   length )

3

对应字符数组的操作, 可以有另一个处理方法:    void upper_case(char str[ ] ) //  虽然定义成数组形式,但是本质还是个指针{         int i ;         printf("sizeof(str) = %ld \n", sizeof(str)); // 最关键的是和sizeof结合的时候 得到的是指针大小(64位机 8Bytes)         printf("sizeof(str[0]) = %ld \n", sizeof(str[0])); //  对象依旧是char , 大小为1         // for(i=0; i='a' && str[i] <= 'z')                          str[i] -= ('a'- 'A');// 97 - 65          }         printf("str :  %s \n", str);}

4

数组  数组定义 int arr[ 5 ] ; // 随机数  int arr[ 5 ] = {11, 22, 33, 44 , 55};int arr[ 5 ] = {11 }; // 11  0 0 0 0 int arr[  ] = {11,22,33} ; // 实际上元素总个数为3 数组使用使用下标 arr[0]  arr[1]   除了定义外 ,只能逐个赋值,和for循环是绝配 arr[i]直接使用数组名arr 通常情况下表示首元素地址 arr == &arr[0]两个例外:  sizeof(arr)  只要arr不是形参数组名,就表示整个数组实际占用的字节数          &arr    整个数组的地址

5

函数:定义----   返回值类型 函数名 ( 形参类型 形参名列表)int       func    ( short a  , int x ){实现内容} 调用----   被调用函数中需要使用怎么样的参数,该被调用函数会返回怎样的信息给我们  1:  参数可以是调用函数中的变量、全局变量、常量, 使用这些值给被调用函数中的形参直接赋值main(){func( 100 , 200  ) ;// 形参a等价于100,  b等价于200}2:   这被调用函数的返回值,有没有什么作用函数的返回值通常根据需要来处理通常返回的是数值就要处理,如果返回的是处理过程的的状态就可以根据需要处理~ 声明 : 仅仅是告诉编译器要调用的函数的返回值类型和形参类型int   func( short  , int );

6

指针1: 定义(指针变量不但包括了地址值,还包括了对象的信息)指针是指针变量, 指针变量是存放地址的变量在32位机,地址寻址范围就是 0x ~ 0xFFFFFFFF           指针变量也就是4B的在64位机,地址寻址范围就是0x00 00 00 00 00 00 00 00 ~ 0xFF FF FF FF FF FF FF FF           指针变量也就是8B的 定义指针需要留意它的类型  定义时候的*表示定义的是指针变量1) 指针类型   *   指针变量名 ;char   *  q ;int     *  p ; 2)  指针类型   *   指针变量名 = 初值 ;char  * q = NULL ; // NULL是唯一一个可以直接给指针赋值的常量int     *  p  = NULL; int  a = 100 ;int * qq = &a ;   把a的地址给了qq //  用其它同类型变量的地址给指针变量赋值char  * pp  = &a ;   类型不一致, 强制类型转换,重点关注!

7

2指针变量的使用1) 直接使用指针变量 ,p始终代表地址一般是对指针变量进行赋值或者判断 或者是运算int  a = 100;int *  p = NULL ;p = &a ;// p 的值为a的地址a = 200; // a 的值为200if(p == NULL)  ******8 2) 使用指针变量的解引用 , *p代表的是地址中的数据,如a 值int  a = 100;int *  p = NULL ;p = &a ;// p 的值为a的地址*p  就可以知道a的地址中有什么数据 应用场景:         if(*p  == 0 ) // 读值做判断*p  = 200 ; // 对a重新赋值为200int  b   =  *p // 读值*p 参与运算  *p 就是去到p所知道的房子里面去取数据补充几张练习题图:

注意事项
1

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

推荐信息