结构体当中的变量scanf输入是否需要取地址_C语言一些需要注意的知识点!

4e4992f737e9c5a5eeb28a0e1149f945.png

前言

Java用了一年多,Python用了一年多,回过头来和C、C++基础知识都搞混了,最近有时间回过头来把本科教材翻一翻,顺便根据教材写一点总结供自己以后回顾。


目录

一~十一:琐碎知识点

十二:指针

十三:结构体


一、优先级顺序(自上至下依次降低):

  1. !(逻辑运算符-逻辑非) 前置++ 前置-- 强制类型转换运算
  2. + - * /...(算数运算符)
  3. < <= > >= (关系运算符)
  4. == != (关系运算符)
  5. && ||(逻辑运算符)
  6. ?:(条件运算符
  7. =,+=,-=,*= ...(赋值运算符)

二、Switch语句中的default标号表示,当没有与表达式相匹配的Case时,执行default后的语句。default出现的位置可以在case前也可以在case后。

一般情况下,case标号后面的语句执行结合之后,需要加break跳出,否则会一直接着执行。

如果case子句中包含了一条以上的执行语句,也可以不用花括号括起来,因为会自动顺序执行本case标号下的所有语句。

三、for(;;)等价于while(1)

四、break语句只能用于循环语句与break语句中,不能单独使用。break终止循环,continue是跳出本次循环,紧接着开始下一次循环。

五、C语言不允许对数组的大小进行动态定义,即数组的大小不依赖于程序运行过程中变量的值。比如,int a[n]不合法。*但是如果在被调用的函数中定义数组(不包含主函数),其长度可以是变量表达式,这种情况称为“可变长数组”。比如:

void function(int n){
    int a[2*n];
    ...
}

六、二维数组初始化时,可以对部分元素进行赋初值,未赋初值的自动补0。比如:

int a[3][4]={
    {1},{5}};
或
int a[3][4]={
    {1},{},{2}};

七、C语言没有字符串类型,字符串是存放在字符型数组中的。由于字符型数据是以整数形式(ASCii代码)存放的,因此也可以用整型数组存放字符型数据:

int c[10];
c[0]='a'; 
这是合法的,但是会浪费存储空间,因为通常int型数据占2或4个字节,而字符型数据仅占1个字节。

字符数组赋值时,剩余的未赋值元素自动赋空字符('0')。

八、C语言中将字符串视为字符数组处理的,使用字符数组存储字符串常量时会自动加一个‘0’作为结束符。因此在程序中往往依赖检测‘0’的位置来判定字符串是否结束。输出字符数组中的字符串时,遇‘0’就停止输出。

//用字符串常量初始化字符数组
char c[]={"i am here"};
或
char c[]="i am here";
//这时字符数组的长度不是9,而是10,因为自动在末尾插入了一个'0'

字符数组将整个字符串一次输入或输出时,用%s格式控制。注意:用%s输出字符串时,输出项需是字符数组名,不能是数组元素名。用scanf输入一个字符串时scanf("%s",c),(*数组名代表该数组的其实地址,不需要地址符号&)其中c是已定义的字符数组名。

char str[13];
scanf("%s",str);
//如果输入how are u? 则只能把how送进去存储,因为被空格分隔了。

通过字符数组名或字符指针变量(使其指向一个字符串)可以输出该字符串,而对一个数值型数组,是不能企图用数组名输出它的全部元素的。

//定义字符指针变量引用字符串
char *str="i love China"; //实际上是将字符串第一个字符的地址赋给指针变量。
printf("%s",str);

不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组,eg.

str="china";//错误,因为str是数组名,表示一个地址,不能被赋值,所以是非法的。
str1=str2;//错误
//用指针变量可以将定义和初始化分开:
char *a;
a="Chianf df";//a是指针变量,可以被赋予字符串首地址。

常用字符串处理函数:

头文件:string.h gets()、puts()

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值