day15-指针III

一、 补充

int a[10] = {0};
int *p;
p = a;
printf("%lu\n",sizeof(p));
printf("%lu\n",sizeof(a));

        注意:sizeof()中,()后既可以填变量名也可以填类型名;编译器在编译时,会将变量名换成类型名

        如: sizeof(int *)        sizeof(int [10])

二、字符型指针

  • 与指向数组元素的指针类似

2.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;// 编译报错
  • const关键字能加就加,加了一定比不加好 
  • 示例1:编写strcpy

  •  示例2:实现strcat

  •  两者优化:

 2.2 字符串函数

2.2.1 strncpy

        一般形式:char *strncpy(char *dest,  const char *src, size_t n);

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

2.2.2 strncat 

        一般形式:char *strncat(char *dest,  const char *src, size_t n);

        只拷贝源中的前n个字符,但遇'\0'结束

2.2.3 strcmp

 2.2.4 strncmp

         一般形式:char *strncat(char *dest,  const char *src, size_t n);

         只比较源中的前n个字符,但遇'\0'结束

2.3 万能指针        void *

  • 可以接收任何指针的地址
  • 不能作为指针来进行指针运算
  • 用于强转
  • 用于设计者不知道用什么类型的地方
  • 可以降低程序的耦合性

void *Memcpy(void *dest, const void *src, size_t n)

2.4 例题

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

 三、 指向数组的指针

  • 可以指向整个数组
int a[10] = {1,2,3,4,5,6,7,8,9,0};
int (*p)[10]; // p是指向一维数组的指针
p = &a;
  • 主要用于二维数组
  • 区分:
以a[3][4] = {0};为例
1.    &a //int (*)[3][4]    //指向数组的指针
2.    a <=> &a[0]           //指向数组的指针,类型名为int (*)[4]
3.    a[0] <=> &a[0][0]     //类型名为,int *

  • 例1: 用指向数组的指针作为函数的参数,编写程序计算某二维数组所有边上元素的和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值