Objective-C前奏--C语言

来源:互联网 发布:劲爆体育网络直播 编辑:程序博客网 时间:2024/05/22 01:41

这篇文章的前提是懂java或者其他的一门语言,因为c的知识太多讲不完,所以只是讲点与java的不同点.

最近打算写点关于ios的开发,ios开发离不开OC,OC要先了解C,此博客就为此而诞生了

基础性的东西就不多做介绍了,不然c太多了,其中会与java对比着讲

.基本数据类型

java数据类型 和长度 int  4个字节 double  8个字节  float 4个字节 long 8个字节  short 2个字节 boolean  1个字节 char 2个字节 byte  1个字节 

C数据类型 char 1, int 4, float 4, double 8, signed, unsigned, long 4, short 2 and void

java

Int 4

Doulbe 8

Float 4

Long 8

Short 2

Boolean 1

Char 2

Byte 1

c

Int 4

Doulbe 8

Float 4

Long 4

Short 2

无 (01)

Char 1

c语言中数据类型比java少一些,c语言中没有boolean类型的数据,那怎样表示数据类型呢? int 1 代表真 代表假

语言中没有String类型的数据   java中表示一个字符串 String  , c语言中表示字符串 通过char类型的数组来表示字符串

语言没有byte类型   所以用char的类型表示byte类型

代码:

#include <stdio.h>    #include <stdlib.h>// sizeof(); c语言的一个函数 可以把 某种数据类型的长度获取出来 int  main() {          // %d 类似sql语句的? 占位符              printf("char的长度为%d\n", sizeof(char));            printf("int的长度为%d\n", sizeof(int));            printf("float的长度为%d\n", sizeof(float));            printf("double的长度为%d\n", sizeof(double));            printf("long的长度为%d\n", sizeof(long));            printf("short的长度为%d\n", sizeof(short));                        //signed, unsigned, 数据类型的修饰符           // signed int ; 代表的是有符号的int的数据 unsigned int ;  无符号的int数据               printf("signed int的长度为%d\n", sizeof( signed int));              printf("unsigned int的长度为%d\n", sizeof( unsigned int));                   // 符号的修饰符 只能修饰 整数类型的数据 long int            // 不能修饰 浮点型的数据 float double             // printf("signed float的长度为%d\n", sizeof( signed float));                      system("pause");    // 调用windows下系统的命令 让程序暂停执行  方便观察程序的执行结果  }

结果为


.基本输入输出函数

%d  -  int short

%ld – long int

%c  - char

%f -  float

%lf – double

%x – 十六进制输出 int 或者long int 或者short int

%o -  八进制输出

%s – 字符串

代码:

#include <stdio.h>    #include <stdlib.h> main() // 程序的入口函数  {    int i = 3;     float f = 3.1415;     double d = 6.2815001; //精确到小数点后6位,所以打出来的时候没有最后一位     char c = 'A';   //通过单引号定义字符      short s = 2;               printf("int i=%d\n",i);     printf("float f=%f\n",f);     printf("char c=%c\n",c);     printf("double d=%lf\n",d);     printf("short s=%d\n",s);          /*char arr[20] ; //定义一个长度为20的数组     scanf("%s",arr);  // 从键盘接受一个字符串,放在c数组里面           printf("arr =%s\n",arr);        */            int j ;     scanf("%d", &j);//&代表的是取地址       printf("j=%d\n",j);              system("pause");    // 调用windows下系统的命令 让程序暂停执行  方便观察程序的执行结果  }


结果为

三.指针

内存条在出厂的时候就已经划分好了地址,例如:0x00002F

什么是指针?举个小例子 int i = 3; 那么0x00002F的别名就是i,而0x00002F这块内存里面的值就是3

这个时候 int* p; p=&i; 那么指针变量p就是i的地址,打印出来的话就是0x00002F,*p就是这块内存里面的值,也就是3,所以改变p的值不会影响到i的值,改变*p的值会影响到i的值,也就是说*p和i其实代表的是同一个变量,代表同一块内存空间

指针了解了,下面做个例子,交换两个数字

void swap2(int* p , int* q){ // 传递的形参为 i 和j 变量的地址       // *p  代表 i   *q 代表就是 j     int temp;     temp = *p;     *p = *q;      *q = temp;} void swap1(int i ,int j){ //  形参 i 和j 跟主函数里面的i和j是两个不同的变量            printf("子函数 i 地址%#X\n",&i);           printf("子函数 j 地址%#X\n",&j);           int temp;           temp  = i;           i = j;           j = temp;} main() {              //利用指针 可以在子函数里面修改主函数里面的数据                 int i = 3;           int j = 5;            printf("i=%d\n",i);           printf("j=%d\n",j);           printf("主函数 i 地址%#X\n",&i);           printf("主函数 j 地址%#X\n",&j);                                             // swap1(i,j);                      swap2(&i,&j);            printf("交换后\n");            printf("i=%d\n",i);           printf("j=%d\n",j);                    system("pause");    // 调用windows下系统的命令 让程序暂停执行  方便观察程序的执行结果  }
其中swap1函数并不能改变主函数里的值,因为swap1的参数i和j是主函数里i和j的一个拷贝,并不是主函数的i和j,但是指针就做到了

未完待续...

原创粉丝点击