对数组名与指针的认识

来源:互联网 发布:淘宝注销账号怎么注销 编辑:程序博客网 时间:2024/05/02 01:26

char *p 这里的*与char一样 定义了变量p为字符型指针。

printf(%s“,*p); 这里的* 称之为间接运算符 不过我个人更喜欢称呼为 取值运算符

*p:找到p变量里保存的地址对应的内存空间。

p++:对p对应的内存空间的值加1。

(*p)++:对p指向的内存空间的值加1。

*(ptr + i)=ptr[i]; 运算符[] = *()  不过值得注意的是 等式两边虽然成立 但是左边ptr对应的内存空间已经改变 而 后者并未改变

我们知道p变量是用来保存地址的 那么p本身也有地址 如果需要变量来保存的话 相应的就有了二维指针 **p 用来保存p的地址。

对于数组 我们都知道数组名保存的是数组首元素的地址 实际上还应该补充一点 对于一维数组名而言 它是一个指针常量 保存了数组首元素的地址。

&a:数组的地址(对一维数组名取地址) *(&a) = a :对一维数组地址取值等于数组首元素的地址。

二维数组名也是一个指针常量 保存了第一个一维数组地址

for循环中 i = 0 ,j = 0;a是一个二维数组名     那么*(*(a + i)+ j)是什么?

a + i:第i + 1个一维数组的地址 

*(a + i) :第i + 1的一维数组首元素的地址

*(a + i)+ j:第 i + 1 个一维数组的第 j + 1 个元素的地址

那么 就很简单了 *(*(a + i) + j) 就是第 i + 1 个一维数组的第 j + 1 个元素的值。


0 0
原创粉丝点击