上一次我们讲的那个指针基础知识上的时候说过指针两边的类型要一致,否则会出错,但是我经过查阅别的资料,发现是可以的,并且不管你是用什么类型的指针来接收定义的值的地址,都是同一个地址,下面是我打印出来的地址,可以看到这俩地址都是一样的。打印地址要用(%p)(point的缩写)
然后真正会导致有差错的是赋值的时候,也就是说你要通过对指针赋值从而实现取地址元素的值的改变。好比我们定义一个int s=10;然后我们知道一个int型有4个字节,然后如果我们定义了一个int*p=&s, *p=2;(对p进行赋值),这时候p能访问到的也是4个字节,然后把这四个字节都改为2。
但如果你用了char* q=&s,*q=2,这时候只能改变一个一个字节的值。
然后我们来验证一下是否真的是int访问4个,char访问一个,可以写俩printf,然后分别对他们进行+1,如下图
p是int型,加一变成了,C而C在C语言中是12的意思,所以是跳过了4个字节,然后就是q,q是char类型,q+1的地址是q的地址+1,是一个。
下面我们将演示下如何通过对指针赋值实现对数组赋值;
for循环的用处就是一个一个把数组的元素进行赋值为1,为什么不用arr【i】=*p呢?用我们老师的话就是脱裤子放屁,哈哈哈哈哈,确实不太文雅,但是确实如此,因为我们p就是指针,指向了arr数组的第一个元素的地址。所以p可以认为是arr【0】的地址,*就是取里面的值的意思,然后+i就一直循环下去啦
好啦,今天的分享就到此结束,我们明天见啦。