c基础(二)

2024-01-02 09:59:34

指针:

? 含义:是一个值,一个值代表着一个内存地址,类似于存放路径? ?

* 运算符 :

? 1 字符*表示指针

作用:通常跟在类型关键字的后面,表示指针指向的是什么类型的值
int * foo, * bar;


声明指针后会随机分配一个内存空间,指针指向的数据是随机的

指针的初始化:
int* p;
int i;

p = &i;
*p = 13;

未初始化的指针数据最好这样定义:int* p = NULL;

?2?运算符

作用:用来取出指针变量所指向的内存地址里面的值
* foo  取出定义的指针的值

& 运算符:

作用:用来取出一个变量所在的内存地址

int i = 5;

if (i == *(&i)) // 正确,*(&i)含义:先取出i的内存地址,在获取内存地址对应的值

?运算:

? ? ?1 指针与整数值的加减运算

? ? ? ? ? ?指针与整数值的运算,表示指针的移动。

? ? ?2?指针与指针的加法运算

? ? ? ? ? 两个指针进行加法是非法的

? ? ?3?指针与指针的减法

? ? ? ? ? 相同类型的指针允许进行减法运算,返回它们之间的距离,即相隔多少个数据单位。

? ? ? ? ? 高位地址减去低位地址,返回的是正值;低位地址减去高位地址,返回的是负值

? ? ? 返回值:ptrdiff_t类型,一个带符号的整数类型别名

? ? ?4?指针与指针的比较运算

? ? ? ??比较的是各自的内存地址哪一个更大,返回值是整数1(true)或0(false)

函数:

? ? 基础结构:

#include <stdio.h>

/* 基础结构*/

int main(void)
{
  int m = addNum(3); /* 使用函数, 3 传递的参数*/
  printf("m=%d", m);
}

int addNum(int a)   /* int addNum 定义函数名称  (int a 传递参数,可以传递多个,使用逗号分开) */
{                /*{函数体:使用此方法需要执行的语句}*/
  return a;      /* return  a; return  返回值,返回计算之后的数据 */
}



传递的参数是拷贝的数据,非自身数据,不会实时更新数据;
除非
 1 函数返回最新的数据,才可以获取并赋值最新的数据
 2 直接修改自身的署,传入变量的地址(函数不要返回内部变量的指针)

void Swap(int* x, int* y) {
  int temp;
  temp = *x;
  *x = *y;
  *y = temp;
}

int a = 1;
int b = 2;
Swap(&a, &b);


递归函数:

函数可以调用自身,这就叫做递归(recursion)

例如:
#include <stdio.h>

int main(void)
{
  int m = addNum(3);
  printf("m=%d", m);
}

int addNum(int a)
{
  a++ ;
  if (a <= 5)
  {
    addNum(a);
  }
  else
  {
    return a;
  }
}

注意:在使用递归函数时,注意做好判断,不然容易出现死循环

入口函数:

main()是程序的入口函数,所有的程序必须要有
类似于页面加载方法,首先执行此方法
其他的方法需要通过main调用

#include <stdio.h>

int main(void)
{
  int m =3;
  printf("m=%d", m);
  return 0;     /* 表示函数结束运行,返回0;  返回非零数据表示运行失败*/
}

函数指针:

调用函数的方法
// 写法一  常用的 函数名本身就是指向函数代码的指针,通过函数名就能获取函数地址
print(10)

// 写法二
(*print)(10)

// 写法三
(&print)(10)

// 写法四
(*print_ptr)(10)

// 写法五
print_ptr(10)

 #include<stdio.h>  


 int addNum(int a)
{
  return a;
}

int main(void)  /*调用其他方法时,其他方法要么写在最前面, 或者使用函数原型*/
{
  // int m = addNum(3);
  // printf("m=%d", m);
  int m = (*addNum)(10);
  printf("m=%d", m);
}


优点:
可以明确参数是一个函数
  参数一就是一个函数
int compute(int (*myfunc)(int), int, int);
函数原型:提前告诉编译器,每个函数的返回类型和参数类型

int twice(int);

int main(int num) {
  return twice(num);
}

int twice(int num) {
  return 2 * num;
}

注意,函数原型必须以分号结尾。
      一般来说,每个源码文件的头部,都会给出当前脚本使用的所有函数的原型。

exit函数:

作用:终止程序的运行
前提: #include<stdlib.h>
返回值(stdlib.h已定义,无需定义):
   EXIT_SUCCESS(相当于 0)表示程序运行成功
   EXIT_FAILURE(相当于 1)表示程序异常中止
atexit()函数:
   用来登记exit()执行时额外执行的函数,用来做一些退出程序时的收尾工作

说明符:

?extern 说明符 :

extern int foo(int arg1, char arg2);
extern 表示:导入使用,声明此方法未在此文件定义,是从其他文件内引入使用的

int main(void) {
  int a = foo(2, 3);
  // ...
  return 0;
}

static 说明符:

1?用于函数内部声明变量时,表示该变量只需要初始化一次,不需要在每次调用时都进行初始化

文章来源:https://blog.csdn.net/weixin_53105591/article/details/135291355
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。