C语言笔记(3)switch、循环结构、数组备忘

版权声明:本文为博主原创文章,如未特别声明,均默认使用CC BY-SA 3.0许可。 https://blog.csdn.net/Geek_of_CSDN/article/details/80413431

记录一些贫僧可能会忘记的东东。

switch

case如果后面没有加break的话会一直继续向下运行,而不是直接跳出switch选择。

例子:

switch(grade)
{
    case 'A': printf('...');break;
    case 'B': ...;break;
    default: ...;
}

执行到switch的时候会把gradecase后面的常量进行比较,没有匹配的就运行default后面的指令。

循环结构

do while记得在while后面加;

数组

数组名本身就是地址(贫僧听说编译器会在编译的时候把数组名换成内存地址,没有验证这个说法,不过这样的话就可以理解为什么scanf的时候数组名前不需要&,数组名可以直接赋值给指针变量)。

指针

一定要记得结合内存操作来理解指针。
在用指针访问二维数组的时候是先行后列,例如*(p + 1) + 2就是第1行第2列的地址,*(*(p + 1) + 2))就是这个地址里面的内容。(听说不建议这样用)

其实函数名也是个地址,所以可以直接p = max(),然后(* p)()来调用max()。不过要记得先定义好,例如int (*p) (int, int)对应int max (int a, int b)

字符数组和字符指针的区别

char * a = "boo";时,赋给字符指针的是字符串的第一个地址,等价于

char *a;
a = "boo";

但是字符数组初始化时赋值char str[4] = "boo";不等价于

char str[4];
str[] = "boo";

数组可以在定义时对各元素赋初值,但是不能对字符数组里面所有元素进行整体赋值。

另一个区别:
编译时字符数组会被分配若干存储单元,而字符指针只分配一个。

定义了字符指针后要及时指定指向,不然可能会指向存放了有用数据的内存段,后果可能很严重。具体的可以看看这个

猜你喜欢

转载自blog.csdn.net/Geek_of_CSDN/article/details/80413431
今日推荐