小杰学C(nine day)——火烧云起映天红,灿烂光芒满碧空。

发布于:2025-07-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

1.二级指针

一级指针:存放变量的地址

二级指针:存放一级指针变量的地址

格式:

        存储类型  数据类型        **指针变量名

如:

        int a = 10;

        int *p = &a;

        int **q = &p;

访问a的值:

        *p **q a

访问a的地址:

        p *q &a

访问p的地址

        q &p

(1)指针和数组

直接访问:通过数组名访问(按变量的地址存取变量的值)

间接访问:通过指针变量访问(存放变量的地址的变量去访问)

①指针和一维数组

如:

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

int *p = a;

直接访问:

间接访问:

当指针变量保存了数组的首地址,指针变量就可以代替数组名完成数组操作

a和p本质上不同(但表达的意思相同)

a是地址常量,p是变量,a不能执行++、--操作,但是p可以

访问数组元素a[i]的值:

直接访问:a[i] *(a+i)

间接访问:p[i] *(p+i)

访问数组元素a[i]的地址:

直接访问:&a[i] a+i

间接访问:&p[i] p+i

(2)指针数组

本质是数组,只是数组内存放的是指针

格式:

存储类型        数据类型        *数组名[元素个数]

存储内容:

1.存放普通变量地址

        int a = 10, b = 20, c = 30;

        int *arr[3] = {&a, &b, &c};

访问b的地址:

        arr[1] *(arr+1)

访问b的值:

        *(arr[1]) *(*(arr+1))

2.存放二维数组每行的首元素地址(列地址)

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

int *arr[2] = {a[0], a[1]};

访问a[1][2] 的地址

arr[1]+2         *(arr+1)+2

arr:第一行首元素的地址

arr+1:第二行的首元素的地址

*(arr+1):第二行首元素 ==> a[1]:第二行第一列的地址

*(arr+1)+2:第二行第三列的地址 &a[1][2]

3.存放字符串

定义的区别:

char str[32] = "hello"; // 存放的是整个hello字符串

char *s = "hello"; // 存放的是hello字符串的首地址

使用指针数组存放字符串

char *s[3] = {"hello", "world", "Deadman"};

打印 "Deadman" 字符串

printf("%s\n", s[2]); // Deadman

printf("%s\n", *(s+2)) // Deadman

printf("%s\n", *(s+2)+4) // man

打印 'm' 这个字符

printf("%c\n", *(*(s+2)+4)); // m

printf("%c\n", *(s[2]+4)); // m

4.命令行参数

argv:就是一个指针数组,里面存放的是命令行传递的字符串

argc:表示argv指针数组里面存储数据的个数,即命令行传递的字符串个数

如:

2.函数

(功能、参数、返回值)(一个特定功能代码块)

(1)定义格式

存储类型 数据类型 函数名(参数列表) // 形参

{

函数体; // 函数功能

return; // 函数返回值

}

  1. 没有参数:参数列表可以省略,也可以使用void
  2. 没有返回值:函数内部没有return语句,数据类型为 void
  3. 有返回值:要根据返回值的数据类型定义函数的数据类型,并没有return语句
  4. 定义子函数时直接定义在主函数上面,如果定义在主函数下面需要提前函数声

(2)函数声明

就是对函数进行一个取名

格式:

        数据类型      函数名(参数列表)  

如:

void  fun();   //  函数声明

int main()

{

        fun();

        return 0;

}

void fun()

{

        内容

}


网站公告

今日签到

点亮在社区的每一天
去签到