它开始步入正轨。闻起来有点像那个。
选择语句
如果语句
#定义_阴极射线管_安全_否_警告1
#包含stdio.h
#包含字符串. h
int main()
{
int输入=0;
Printf('您想很好地键入代码吗?(1/0)n’;
scanf(“% d”,输入);
if(输入==1)
Printf('好工作n ');
其他
Printf('回家卖红薯n ');
返回0;
}
循环语句
while语句
#定义_阴极射线管_安全_否_警告1
#包含stdio.h
#包含字符串. h
int main()
{
int line=0;
Printf('入坑,开始学n ');
而(第20000行)
{
Printf('键入一行代码:%dn ',第行);
线;
}
if(线路=20000)
Printf('叮~找到好工作D====(;*)BN ');
返回0;
}
函数
定义一个求和函数。
int Add(int x,int y)
{
int z=x y;
返回z;
}
int main()
{
int a=100
int b=200
int sum=0;
总和=相加(a,b);
printf('sum=%dn ',sum);
返回0;
}
数组
同一类型的一组元素。
定义:int arr[10]={ 0 };//定义一个由10个整数组成的数组。
char ch[20];//字符数组
float arr 2[5];//浮点数组
数组通过下标访问元素,例如:intar[10]={ 1,2,3,4,5,6,7,8,9,10 };用语句printf ("%dn ",arr[4]);数字5可以打印;那是arr[下标]
操作符
这一次,引入了移位运算符。
向左移动运算符,将二进制位向左移动;
之后,shift变量本身不变,是运算后生成的值,比如代码。
int main()
{
int a=1;//二进制状态的最后四位是0001。
int b=a2
printf('%dn ',b);//b的值为4,二进制状态最后四位的状态为0100。
printf(“% dn”,a);//变量A还是1
返回0;
}
单目操作符、双目操作符、三目操作符
所谓几个操作数,就是有几个操作数。
单目操作符是:a,-a,a;双目操作符有:a b;三元运算符是:exp1?Exp2:exp3,这个表达式的意思可以解释为exp1,如果是真的,整个表达式的值就是Exp2,如果不是真的,整个表达式的值就是exp3。
关键字
typedef
重命名类型,即命名一个类型。
typedef无符号int uint _ 32//将无符号int重命名为unique _ 32,这样unique _ 32也是一个类型名。
static
1.修改局部变量-静态局部变量:使局部变量的生命周期更长。
2.修改全局变量-静态局部变量:使全局变量只在它们自己的源文件中可用。
3.修饰符函数-静态函数:将函数原来的外部链接属性改为内部链接属性。
总结:让小范围的动作变大,大范围的动作变小。
指针
指针变量:int*类型的指针变量,用于存储地址(*这里只是一种形式,这意味着变量是指针变量)
引用:根据指针变量存储的地址找到地址的变量;*变量名,(*这里是运算符)
int main()
{
int a=10//定义一个变量,申请4字节内存。
int * p=a;//取地址放在P的应用程序的内存中,其中*表示P是指针变量。
* p=20//*-取消引用操作符,根据P中的地址找到A,对A进行操作。
printf('a=%dn ',a);
返回0;//打印结果为20
}
实施过程可以理解为:房东找了一个房间出租,房间起了个名叫做a雅居,住进来个人叫10君,房东看了看a雅居的门牌号(这个过程是a),假设地址为0x0012ff40记在本子p上.
,本子的规格为int*;某一天房东看10君不顺眼,想让20君住进去,房东根据本子p上的地址(即0x0012ff40)找到了10君(这个过程就是*p),把他赶了出去,让20君住进去;现在去a雅居找到的人就是20君流程图:
??int a=10;解释:申请一块内存命名为a,这块内存放的值为10,这块内存的地址为0x0012ff40
int*p=&a;解释:申请一块内存命名p,把a的地址放到这块内存中;这块内存p也有地址,但此时不考虑(&a就是获取a的地址)
*p=20;解释:*p(即解引用)根据p内存储的地址找到a,此时*p就相当于a,对*p的操作相当于对a进行操作;所以把20赋给*p就是把20赋给a
指针变量的大小
指针存储的是地址,32位的机器地址是32位,也就是4个字节,所以32位的机器指针大小为4个字节;同理在64位的机器上地址是64位,占8个字节,所以所以64位的机器指针大小为8个字节
指针变量的大小只与平台位数有关,和变量类型无关
int main() //32位平台
{
printf("%dn",sizeof(char*));//占4个字节
printf("%dn",sizeof(short*));//占4个字节
printf("%dn",sizeof(int*));//占4个字节
printf("%dn",sizeof(double*));//占4个字节
return 0;
}
结构体
用来描述复杂对象,本质是一种自定义创造出来的类型
结构体类型内有成员,要用.操作符访问
struct Book //结构体的类型
{
char name[20];//书名
short price;//价格
};//这里的分号不可缺少!!!!!!
int main()
{
//利用结构体类型--创建一个该类型的结构体变量
struct Book b1 = { "C语言程序设计", 55 };
printf("书名:%sn", b1.name);//此处的.为属性操作符,用于访问结构体成员
printf("价格:%d元n", b1.price);
b1.price = 15;//访问到价格成员,更改数值
printf("修改后的价格:%d元n", b1.price);
return 0;
}
利用指针pb打印出书名和价格(使用.操作符打印)
struct Book
{
char name[20];
short price;
};
int main()
{
struct Book b1 = { "C语言程序设计", 55 };
struct Book* pb = &b1;//定义指针变量pb *表明是指针变量
//利用指针pb打印出书名和价格
printf("%sn", (*pb).name);//解引用
printf("%dn", (*pb).price);//
return 0;
}
还可以使用->操作符打印,更加便捷
struct Book
{
char name[20];
short price;
};
int main()
{
struct Book b1 = { "C语言程序设计", 55 };
struct Book* pb = &b1;//定义结构体指针变量pb *表明是指针变量
printf("%sn", pb->name);
printf("%dn", pb->price);
return 0;
}
.操作符和->操作符的比较:
->操作符的使用结构是:结构体指针->成员 只要定义了结构体指针变量就可以使用,直接从结构体指针变量指向成员;但.操作符的使用结构是:结构体变量.成员 需要结合解引用,繁琐
对于结构体变量的更改
前文使用b1.prince=15;语句可以更改价格,因为prince是变量,所以可以直接更改数值;但是结构体中的书名name是数组名,本质上是地址,不可以直接更改,所以使用b1.name=”C++程序设计”;语句会报错不可以更改。
想要更改如下所示:
struct Book//结构体的类型
{
char name[20];//书名
short price;//价格
};
int main()
{
struct Book b1 = { "C语言程序设计", 55 };
strcpy(b1.name,"C++程序设计");//全称strcpy-string copy,是一个字符串拷贝函数
printf("%sn",bi.name);
return 0;
}
strcpy()函数全称是:strcpy-string copy,是一个字符串拷贝函数
此函数有两个参数,strcpy(目的地,”需拷贝的字符”)