嗨翻c语言
1. 入门
- 为什么字符从零开始编号?
字符的索引数值表示的是一个偏移量,它表示的是当前所引用的字符与第一个字符之间差多少个字符。
- 单双引号的区别?
单引号 一个字符,双~ 字符串
- 字符串字面值和字符数组的区别?
前者是常量,一旦赋值,不能再修改。
- Break 和continue?
break是退出循环,continue是退出当前循环并且进行下一次循环。
break不能用于if语句。
2.储存器和指针
- 两张存储器图
图一
图二 一个学JAVA时用的图(来源博瑞思创—翁老师)
- Int *a =5
A 是一个指针变量,它保存一个地址,地址中保存一个int类型的数值5
- 指针的作用
指针可以避免副本的产生和共享数据。
- 指针像是一个遥控器,存储器像是一个冰箱。
存储器和指针的图
- sizeof(指针)
- 数组名做指针
int a []={,,};
int *b =a;
c=sizeof(a);
d=sizeof(b);
c = 3 d = 4/8 (32/64)
&a == a &b! = b
- 指针的退化
把数组赋给指针变量,指针变量就会只知道数组的地址信息,而不知道数组的大小。相当于指针丢失了一些信息,称这种信息丢失为退化。
数组变量不能指向其他地方
- 指针类型
指针也是有类型,char int 等,主要是在进行指针运算时可以根据指针类型进行转换,比如char类型的指针a ,a+1 存储器地址 +1
int类型的~b ,b+1 ~ +4
- 指针输出
int num[]={,,}
printf("%p",num);//地址
printf("%i",num[]);//数值
printf("%i",*(num+));//数值 char *msg="Hello"
puts(msg+)//字符
printf("%p",msg)//地址
- 指针的加法交换律(来源:百度)
-
int dose[]={,,}; dose[] == *(dose+) == *(+dose) ==[dose] 只要一个是指针,一个是整形就行。
用指针输入数据
fgets(food,sizeof(food),stdin);
scanf("%4s",food);
gets(food);
安全从高到低
scnaf遇到空格就会停止。(亲测有用)
- card[] or *card?
-
card []="qwe";//数组 一下这两个等价
void func(char card[])
{
//card 是指针
} void func(*card)
{
//card 是指针
}const与字符串常量
字符串常量都是只读的,不可修改。加了const以后,会在你试图修改const修饰过的变量时编译器报错。
- 字符串常量和字符数组
char * card="QWE"//不可修改
char car[]="BBB"//可修改