指针二 (1-8)

一-二 、字符串和字符指针上、下

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

字符指针:char *p

字符指针和字符串的特殊性在哪里?

把一个字符串赋给指针,指针存储了字符串常量的起始地址

这个“Hello World”是字符串常量,不能通过指针修改、

通过两个数组分别存储的字符串,之后操作第一个ch1数组中的字符串(这边叫操作不对),应该是通过if赋值改变的ch1数组中存储的字符串,改变过之后又赋给ch2数组。

v2

&p1=oxbfc6d748,是这个指针的地址,ox8048520是这个指针所储存的地址。

在c语言中,只有static修饰的局部变量,全局变量,字符串常量的情况下,放在静态区,程序结束才会释放,一旦运行之后,一直占据内存

就像这样,*p='h'或者像是这样* p1 -=32;就是已经赋值之后修改了指针

不利用字符串函数,实现两个字符串的连接

首先第一个循环, 判断字符不是\0 , 则i++ ,等到\0时,结束循环(找第一个\0)

第二个循环,结束条件是第二个\0

这个p=q是什么意思?

答:指针一直在++移动位置,要想回到字符串的首地址,要用之前备份下来的q的内容(字符串首地址

提示报错!!!

输出运行结果!!

三、指针数组(上)

1.指针数组的定义:具有相同存储类型和数据类型的指针变量构成的集合

  1. 指针数组名表示该指针数组的起始地址

  1. 声明一个指针数组

double * pa[2]

3.

a[0][1]=*(a[0]+1)

四、指针数组(下)

4.1

p[1]是一维数组首地址, p[1]+2 是首地址往后的两个地址,再取值,就是 *(p[1]+2)就是取到值7

4.2

难点:怎么表达第i行第j列

首先三种形式输出二维数组所有元素(a[i][j]、*(*(a+i)+j)、*(*(p+i)+j))

  1. 如何计算指针数组占用的存储空间

一个指针数组里面有2个元素:一个指针占4个字节,看有几个指针n,总的存储空间就是4n

2.指针数组名加1,移动多少字节? 加1就是移动一个字节,一个字节就是一个指针,4个字节

  1. 指针数组名相当于什么样的指针? 二级指针

五、多级指针(上)

5.1多级指针的定义

指向指针变量的指针变量是多级指针

一级指针变量:指向处理数据的指针变量

二级指针变量:指向一级指针变量的指针变量

二级指针啥意思,就是一级指针p指向变量m的地址,二级指针q指向变量p的地址。指向指针的地址的指针叫二级指针。

二级指针q q就是一级指针再取地址,就是二级指针

这边我们来看一下 p指向m, p=&m,打印出来的是m的地址

q指向p,q=&q,打印出来的是p 的地址

但是m,*p,**q都是值,不是地址,都是变量m里面存的值

六、多级指针(下)

一个指针指着一个字符串,一一对应

思考:多级指针在内存中占几个字节?多级指针存的是地址,32位系统里都是4个字节,64位系统都是8个字节,跟几级指针没关系。

           多级指针+1,移动多少字节?移动一个目标,就是一个指针,一个指针是4个字节

七、void指针和const修饰符(上)

  由于这个指针p是void类型,m是int 类型,n是double类型,所以在指向的时候要给m,n转换类型成void类型。
变量先和指针类型一致,到了要输出的时候,再把指针强制转换成变量的类型。
在赋值的时候可以这么写,可以不用先把变量转换成void类型,最后输出的时候把指针强制转化成变量的类型就不会报错了。

两个都是类型转换,有什么区别呢?

第一个:给p赋值的时候,得对应p的类型 第二个:输出%d的时候得对应int类型

总的来说:所以给数据强制转换什么类型,根据使用场景确定

void没有进行强制转换之前不可以进行任何的算术运算!!

八、void指针和const修饰符(下)

两种实现方式:

1.利用数组实现

2.利用void 指针实现 a[i] 也可以写成 *((int *)p+i),这只是对

3.再利用一个int 型指针变量q,过渡一下

先是把a赋给q,q的指针类型是已知的,再把p转换成跟q一样的类型   很聪明的方法!!!!

const 修饰符

作用:是使一个变量常量化,不能修改,不能通过指针改变变量中的值

如果是const int *p,则p指向的变量中的值不能被修改,这边的const修饰的是*p,所以*p不可以被修改

但如果是int *const q,则是地址不能被修改,但是q指向的变量中的值可以被修改。就是q不再可以被赋值。const修饰的是指针q,因此这边地址不可以被修改。

所以说,const修饰谁,谁不可以被修改。

比如说这样就是不对的,已经用const修饰变量q了,那么再把m 的地址赋给q,就不对了,因为q的值不能被修改,也就是不能被赋值

那么只能改成这样

void指针有什么用?答:通过指针处理各种各样的情况

main是否可以带参数(涉及到const指针)?可以带参数,不过也没怎么听懂。

这边main函数中,带const是不能通过argv,去修改命令行传给它的那个参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值