嵌入式笔记十五——指针Ⅲ

一、字符型指针:

1.1 const的作用:

 在指针变量前加const修饰,无法通过该指针去修改指针指向的值。

//情况1:
const int *p;
p = &i;
*p = 100;// 编译报错(指针指向的值不可变)
 
//情况2:
int const *p;
p = &i;
*p = 100;// 编译报错
 
//情况3:
int * const p;
p = &i;// 编译报错(指针本身不可变)
*p = 100;
 
//情况4:
const int * const p;
p = &i;// 编译报错
*p = 100;// 编译报错(两者均不可变)

1.2 示例:

1. 编写strcpy:

2. 编写strcat:

给形参加上const(如const char *)之后,函数就能接收字符串字面量了。

3. 编写strcmp:

4. 优化:

将函数的返回值改为地址后,就可以在puts中嵌套调用函数。

1.3 字符串函数:
1.3.1 strncpy:

 只复制源中的前n个字符,遇'\0'结束。

1.3.2 strncat:

1.3.3 strncmp:

注意循环条件是--n而不是n--。

1.3.4 万能指针 void *&Memcpy:

二、 二维整形数组与指针:

2.1 指针数组与数组指针:

1、指针数组:即存放指针变量的数组。

        int *p[10];  //p[10]为数组, 定义了10个指针变量。

        printf("%lu\n",sizeof(p));  //输出结果为80(占80个字节)。

2、数组指针:即指向整个数组的指针。

        int (*p)[10];  //一个指向长度为10的一维整型数组的指针。

        p = &a;  //在指针变量p中保存长度为10的一维整型数组的地址,p与p+1差40个字节。

2.2 区分:

1、表达式a[0]:指针+1(跨4个字节),表达式a: 指针+1(跨16个字节),表达式&a:指针+1(跨48个字节)。

2、a[i][j]  <=>  *(*(a + i) + j)

三、练习:

1.输出运行结果:

int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

int (*p)[4];

p = a;//指向a[0]的指针

printf("%d\n", *((int *)(p + 3) - 3));//运行结果为10

2.编写程序在一个字符串中查找某个字串首次出现的位置, int subString(const char *s, const char *sub)。

3.编写程序计算某二维数组所有边上元素的和。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值