C-函数,数组指针,指针之间的运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-函数,数组指针,指针之间的运算相关的知识,希望对你有一定的参考价值。

goto原理:

当执行到goto语句的时候, cpu就会跳转到当前函数指定的标志的地方
 
使用goto也可以实现循环操作
但是在使用的时候,要注意不要造成死循环
 
一般情况下不建议经常使用goto语句,因为不安全——容易造成死循环
除非在特别确定不会有死循环的情况下,才可以用goto
 
goto不仅可以往前跳,还可以往后跳
使用goto时, 标签代码行的下一行代码不能是声明变量,如果非要写在这个地方,那就在声明变量行前面加一句无意义的代码
 
标示符:  通俗来讲就是程序员可以自己命名的东西: 变量名,goto标签名, 函数名等
 

面试题3

for(int i = 0; i<10; i++ ){
    for(int j = 0; j<10; j++){
        //用一段代码,直接跳出外层循环
        i = 10;
        break
    }
}
 
函数的作用:可以实现代码的重用,函数只需要顶一次,那么函数中的代码可以随意使用
 
使用函数的注意:
1.函数的位置:main函数的外面
 

全局变量与局部变量

初始化
1.局部变量:未初始化的时候,是一个随机数
2.全局变量:如果是一个数值,那么就默认初始化为0;如果是char,默认初始化为’\0’,即ASCII码中的0
 
创建时间
1.局部变量:当运行到声明语句的时候才会创建,出了所在作用域就会被回收
2.全局变量:程序运行时就会被创建,程序结束时才会被回收
 
全局变量的特点:
1 int num = 10;
2 int main(){
3     printf(“%d\n”, num);  //这里是访问的全局
4     int num = 10;
5     printf(“%d”\n, num); //这里是局部
6 }

 

 

函数的参数

1.声明在 函数名称后面的小括弧中的变量,我们就叫做这个函数的参数
 
形参与实参的关系:
赋值
 
return 可以带常量, 也可以带表达式  当return 表达式的时候,   return的是表达式的结果
 
关于函数的声明和定义:
1.如果函数写了声明, 那么这个函数的定义就可以放在调用函数的后面了
 
2.函数的声明最晚也要放在函数调用之前,一般情况下写在最顶部
 
3.如果被调函数在主调函数之前,这个时候,被调函数的声明可以省略,直接写定义即可;如果被调函数的定义在主调函数的后面,那么这时候必须在调用之前声明被调函数
 
4.声明函数的函数投,必须要和实现函数的函数头一致(参数可以不一致,只不过返回值或者结果紊乱)
 
5.在声明函数的时候,如果函数有参数,那么参数的名称可以省略(但是强烈建议声明实现统一)
 
6.如果函数的返回值是int类型的,可以不写声明,因为缺省就是int类型的(但是会给出警告,所以还是要写一下的)
 
-=-=-=-=-=-=-函数编写规范-=-=-=-=-=-=-
1.main函数无论如何排在第一位
2.无论什么情况,函数都要写声明和实现
声明写在最顶部,#include 下面
实现写在main函数后面
3.声明和实现一致
 

指针之间的运算

为什么两个指针变量之间不能进行加法运算?以及乘法和除法
1.加法的话,加完以后有可能会越界,超出了数组的地址界限,溢出
2.乘除法同理
 
作用:
1.判断两个指针指向的变量是否是同一个,如果是,那么相减的结果是0
2.判断两个指针指向的变量是否相邻,如果是,那么相减的结果是正负1
 
 
两个指针变量(p1, p2)之间的关系运算
p2 > p1
结果等于1     p2在高位
结果等于0 p1在高位,或者指向同一个元素
 

二维数组与指针

有二维数组 int array[][] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}}
则易得: array[0] 为第一行的第一个元素,也是第一行的首地址
推理可得: array[0]+1, array[0]+2, array[0]+3 即为第一行的第2, 3, 4个元素
约定: array[0], array[0]+1, array[0]+2, array[0]+3 为二维数组中的列指针
 
又易得: array 为第一行的首地址
所以推理可得:array+1是 第二行的首地址
array+2是第三行的首地址
 
约定:array, array+1, array+2 为二维数组中的行指针
 
 数组指针:
定义一个指针变量,让这个指针变量指向一维数组的元素
 
二维数组指针:
行指针: 用来指向二维数组的每一行,存放的是行的首地址
形式: 数据类型 (*指针变量名)(数组的第二维的长度)
 
二维数组指针的初始化
1 int a[2][3];
2 int b[2][2];
3 float f1[4][4];
4 //假设要定义一个指向数组a的行指针
5 int (*pa)[3] = a[0];  //a[0] == a == &a[0] ==&a[0][0]
6 
7 //二维数组的使用
8 *(*(p+i)+j)   //获取二维数组的每个元素

 

 

以上是关于C-函数,数组指针,指针之间的运算的主要内容,如果未能解决你的问题,请参考以下文章

指针,数组指针,指针数组,函数指针解析

指针,数组指针,指针数组,函数指针解析

C语言基础:指针相关概念(指针的算术运算 指针数组指向指针的指针 传递指针给函数 从函数返回指针 )为啥C 语言不支持在调用函数时返回局部变量的地址?

C基础指针的使用

连续熬夜爆肝C指针,你想知道的这里都有

20160210.CCPP体系详解(0020天)