C语言的数据运算符 这一节接触的都是新东西,hold住。
数据运算符顾名思义就是对数据进行操作的运算符,这里设计到几个新概念,如果刚开始不了解,也没有关系,毕竟是进阶的东西,先大概看一下有个基础概念,因为这一次我们接触到了C语言中最难懂也是最优雅 的指针,此处有掌声。
	数据运算符有下面几个:
数据运算符 
含义 
 
 
sizeof() 
获取xx的大小,返回字节长度 
 
[] 
数组 
 
& 
取地址 
 
* 
定义指针或者解指针 
 
-> 
结构体解应用 
 
. 
结构体应用 
 
详细说说这几个的具体含义:
sizeof(xx):这个比较简单,就是计算xx的字节长度;[]:数组的定义方式,比如int a[10]就是定义了一个一维的整数数组,这个数组长度为10 ,但是有个问题要注意了,数组的长度从0 开始,所以如果访问数组a,只能是a[0]到a[9],如果下标是10就越界报错了,其实ANSI也曾尝试着把这个下标从1开始矫正过来,但是几十年的传统还有兼容性,此事只能作罢;&:取地址是取一个变量的地址,比如int a=0;我们顶一个了一个整数a,它的值是0,那么它位于哪里呢,这个就类似于你叫张三,你家的地址在桃花坞里桃花庵,桃花庵里第一间,另注意这个符号在C++里面是引用的含义,不要混淆;*:这个星号就大有来头了,前后左右的含义不一样,古往今来也很很多人栽进去了,就是因为这个隐晦又高效的指针,所以有了一本书叫做《C和指针》,专门来讲讲这个东西,后面我们也会 有系列小篇,争取能让大家越过这个坎,那就算是C语言里面的高手了;->和.:这两个的区别主要在于结构体,如果定义的结构体是指针用->,如果不是用.,这个我也迷惑过。 
看个例子来show一下:
这个例子又新增了一些东西,除了上面描述的运算符,我们增加了一个头文件string.h,这个用来后面调用strcpy函数,另外还使用了结构体,下一节来聊聊必须要使用的结构体。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include  <stdio.h>  #include  <string.h>  int  main () {     int  a;     printf ("sizeof(a) is %d \n" , sizeof (a));     int  arr[100 ];     arr[0 ] = 0 ;     arr[2 ] = 2 ;     printf ("The value of arr[0] is %d\n" , arr[0 ]);     printf ("The value of arr[1] is %d\n" , arr[1 ]);     printf ("The value of arr[2] is %d\n" , arr[2 ]);     printf ("The address of a   is %X\n" , &a);     printf ("The address of arr is %X\n" , arr);     int  *pa = &a;     printf ("The address of a   is %X\n" , pa);     int  *parr = arr;     printf ("The address of arr is %X\n" , parr);     struct  person      {         char  name[20 ];         int  age;     };     struct  person  lilei  ="Li Lei" , 18 };     printf ("Person 1 : Name: %s\t Age : %d\n" , lilei.name, lilei.age);     struct  person  hanmeimei ;     struct  person  *phanmeimei  =NULL ;     phanmeimei = &hanmeimei;     strcpy (phanmeimei->name, "Han Meimei" );     phanmeimei->age = 16 ;     printf ("Person 2 : Name: %s\t Age : %d\n" , phanmeimei->name, phanmeimei->age);     return  0 ; } 
相应地Makefile如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ALL : operator1  operator2 operator3 operator1: operator1.c 	gcc -o operator1 operator1.c operator2: operator2.c 	gcc -o operator2 operator2.c operator3: operator3.c 	gcc -o operator3 operator3.c .PHONY : clean clean: 	rm -f operator1 operator2 operator3 
输入make,然后./operator3输出为:
1 2 3 4 5 6 7 8 9 10 sizeof(a) is  4 The value of  arr is  0 The value of  arr is  0 The value of  arr is  2 The address of  a   is  EDFAD6D8 The address of  arr is  EDFAD710 The address of  a   is  EDFAD6D8 The address of  arr is  EDFAD710 Person  1 : Name: Li Lei        Age : 18Person  2 : Name: Han Meimei    Age : 16
Q&A :上上节的答案,为什么a没有赋值却有这么大的值,这个涉及到后面会说到的全局变量和局部变量的区别,局部变量在未初始化之前,有可能是任何值,所以为防意外,变量定义最好都要初始化。