云计算百科
云计算领域专业知识百科平台

0基础学嵌入式-C语言部分-指针知识点总结(难点)

1. 二级指针(指向指针变量的指针)

  • 定义:二级指针是指向一级指针变量的指针。
  • 使用场景:
    ① 函数体内需修改函数体外指针变量值时,传递指针变量的地址(即二级指针);
    ② 指针数组传参时,数组名是二级指针(指向第一个指针元素的指针)。

2. void指针

  • 作用:表示内存地址,通常用作函数传参和函数返回值。
  • 类型转换规则:
    • char *、int *、double * 转为 void * 时,需要强制类型转换;
    • void * 转为 char *、int *、double * 时,不需要强制类型转换。

3. volatile指针

  • 关键字作用:常与指针或变量搭配使用,表示变量或指针指向空间的数据易被改变,防止编译器优化(每次读写变量都直接访问内存)。

4. 数组指针与指针数组

  • 概念区分:
    • 数组指针:是指针,指向整个数组;
    • 指针数组:是数组,每个元素都是指针。
  • 指针数组示例:字符型指针数组可用于操作字符串数组(如 const char *pstr[12] 存储月份字符串)。
  • 数组指针特性:
    • 定义形式:如 int (*p)[5];
    • sizeof 操作:数组名(如 a)的大小是数组总字节数(如 int a[5] 的 sizeof(a) 为 20),指针大小为 8;
    • & 和 * 操作:& 数组名时类型升级为指向数组的指针(如 &a 是 int (*)[5]),* 数组指针时类型降级为指向数组元素的指针。

5. 二维数组传参

  • 数组名性质:二维数组名是行指针(指向数组第一行元素的数组指针)。
  • 访问方式:支持多种形式(如 a[m][n]、*(a + m) + n 等)。
  • 传参方式:可通过 int (*q)[3] = a; 等方式传递二维数组。

6. 指针数组传参

  • 示例:指针数组 int *a[5] 作为函数参数时,函数定义为 int fun(int **pa, int len),调用时为 fun(a, 5)。

7.代码练习

        封装函数从终端接收5个字符串,封装函数从大到小对字符串排序,封装函数打印字符串排序后的结果。

#include <stdio.h>
#include <string.h>

void ipt(char *ppstr[],int len)
{
int i = 0;
for(i = 0; i < len; i++)
{
gets(ppstr[i]);
}
}

int maopao(char *ppstr[],int len)
{
int j = 0;
int i = 0;
char *tmp = NULL;

for(j = 0; j < len – 1; j++)
{
for(i = 0; i < len -1 -j; i++)
{
if(strcmp(ppstr[i],ppstr[i+1]) < 0)
{
tmp = ppstr[i];
ppstr[i] = ppstr[i+1];
ppstr[i+1] = tmp;
}
}
}

return 0;
}

void opt(char *ppstr[],int len)
{
int i = 0;
for(i = 0; i < len; i++)
{
printf("pstr[%d] = %s\\n",i,ppstr[i]);
}

}

int main(void)
{
char str[5][32] = {0};
char *pstr[5] = {str[0],str[1],str[2],str[3],str[4]};

ipt(pstr,5);
maopao(pstr,5);
opt(pstr,5);

return 0;
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » 0基础学嵌入式-C语言部分-指针知识点总结(难点)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!