1.概念
1.函数名代表函数的入口地址
2.交换地址
1.*s,说明s是一个指针变量
2.s=&k;说明让s指向k地址
3.所以*s=k实际上与上面那句是等价的,因此m一直都没有什么变化依然是3
4.k是全局变量所以是5
3,7;改变s指向之后,又将值赋给了s指向的内容,虽然k是全局变量,但是发生了改变
3.传值&传地址
1首先这个题没有进行地址交换,所以不需要考虑能否通过形参来改变实参,这是一个简单的函数调用而已
2.data传过去之后传回来是56,但是紧接着++
首先调用函数一般最常见的作用就是要交换几个值
所以说调用函数功能是确定的
第二步:分析3者的不同,1是传了地址,那就能成功交换
2是传值,那出调用函数之后这个传值就没用
3是a传了地址,b传了值,所以a会变成b,但是b的值本身不会改变
4.指针引用
a[p-a]相当于a[0]
5.读程序
1.指针变化
将p传递给f()函数,f()接受整形指针s
指针的指向改变了,因此如果通过指针找元素,和之前不一样了
1.本身s是指向第一个元素,然后+1就是指向了第二个元素为2
2.此时s[1](即a[2])的值是3,+6就是9
3.*s(a[1])指向的是2,再+7就是9(实际上是第2个元素
4.此时变成了指向3 为p[0]
所以a[0]为1,a[1]==9,*p==9,p[1]==4
6.指针运算
a是数组名不能执行自增运算,它是首元素地址,它是一个常量。
7.指针与二维数组
需要理解二维数组其实就是多个一维数组组成的
可以通过每一行的首元素地址找到该行元素
如果找到某行元素之后再进行指针的移动那就是在这一行往后找元素
1.
答案:2,4,6
解析:
首先我们可以看出来这是一个二维数组,我们可以根据行列写出来
1 2
3 4
5 6
接下来通过循环来将每一行的首地址赋给对应指针数组元素,那么指针元素+1就是输出每一行的第二个元素。所以输出的就是每一行的第二个元素2 4 6
2.
注意:如果指针越界其结果是不确定,因为内存中有很多元素,不能说其就一定不指向任何元素
3.如何用指针形式表示
8.指针与字符数组
A
B:分别包含了5个字符,还有\0
C:这是一个指针数组。包含的是指针,所以值不是字符串,而是字符串指针
D:aa本身是一个指向两个字符指针的指针,不是含有两个元素的字符型数组,是字符型指针数组
字符指针变量初始化为一个字符串方式:
1.通过赋值运算使一个字符指针指向一个字符串常量。A
2.第一一个字符指针变量,并且初始化为一个字符串的首地址
char*str="helloworld";
解析:
B:数组名是一个地址常量,字符指针变量是一个变量,因此不能对数组名赋值(常考)
C:不能直接用=.只有在数组初始化的时候可以直接赋值
D:初始化的时候不能不给大小【】
9.指针与字符型指针数组
B
解析:
a有两个数组元素,并且分别指向两个字符串,存放的是两个字符串的首地址。A:不是值,是指向
B:因为存放的是首地址
C:a是一个字符型指针数组,不是指针变量
D:\0不是4个
10.指针与字符串
ps指针指向s,但是再去变化指针,与原先的元素没有任何影响,因此仍然为verygood
(97)
11.二层循环
第一层循环每次进行,第二次循环都要完全进行,只有内层循环进行完全,才能进行外层循环的第二次
12.函数模拟
13.指针与ASCII码
如果是*(p+2)那是指向向后两个元素,但是如果是*p+2那就是将字符+数字,这个时候就需要运用
ASCII码
每个+2,wind ykpf
14.指针与静态动态内存管理
2.
fun中开辟的空间,在返回函数之后会自动释放,所以并不能实行加法运算,返回之后空间释放了
所以有运行错误
15.指针与转义字符
注意:\4
16.指针与递归函数
fun(p+1)是不断递归的形式,因此是倒叙输出原函数传到形参的值了