C语言基础:C语言指针(5) - 指针和数组
来源:互联网 发布:沃尔沃s60轮毂数据 编辑:程序博客网 时间:2024/05/16 19:11
上一节, 我们补充了一点关于指针的小知识, 这次我们来讲讲指针和数组:
首先, 我们来看一个小例子:
#include <stdio.h>int main(){ int ages[5] = {10, 20, 30, 40 ,50}; int *p; p = &ages[0]; printf("p = %d\n", *p); return 0;}
输出的结果:
有些人看到后, 知道是可以这样子传值, 但如果我们把整个数组的所有元素打印出来呢? 我们应该怎么做? 内存中又是怎样存的? 下面我们来看看一个例子:
#include <stdio.h>int main(){ int ages[5] = {10, 20, 30, 40 ,50}; int *p; p = &ages[0]; for (int i = 0; i < 5; i++) { printf("p = %d\n", p[i]); } return 0;}
输出的结果:
没错, 按照上面的例子, 我们知道是可以这样子输出数组里所有的元素, 那么为什么这样子做是可行的呢? 下面我看看关于内存的示意图:
看完示意图之后, 我们来解释一下:
当p = &ages[0]的时候, p的地址就是数组ages第0个元素的地址, 也就是说p其实就是数组元素, 切记不是指向数组, 所以当我们更改p的元素的时候, 也就是说更改数组ages的元素, 所以也就是我们所输出的结果, 当然还有其他办法更换, 比如下面这个例子:
#include <stdio.h>int main(){ int ages[5] = {10, 20, 30, 40 ,50}; int *p; p = &ages[0]; p += 1; printf("p = %d\n", *p); return 0;}
解释一下p += 1, 其实这句代码就是更改地址:
由前面一句p = &ages[0] 的时候, 我们就知道p所存的地址就是第0个元素的地址, 一旦该地址+1, 也就是第1个元素的地址, 但地址加多少, 这个取决于指针的类型,比如int * 4, double * 8 以此类推, 所以我们也可以实现这样子去改变p的值, 当然你也可以写一个函数去实现更改地址, 比如下面这个例子:
#include <stdio.h>void change(int *array);int main(){ int ages[5] = {10, 20, 30, 40 ,50}; change(ages); return 0;}void change(int *array){ printf("%d\n", array[2]);}
好了, 这次我们就讲到这里, 还有更多的方式大家可以慢慢去尝试, 下次我们继续~
0 0
- C语言基础:C语言指针(5) - 指针和数组
- C语言指针和数组基础
- c语言基础:数组、指针
- c语言基础--数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言 数组指针和指针数组
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- C语言指针数组和数组指针
- 关于C++中如何判断文件、目录存在的若干方法
- linux下导入、导出mysql数据库命令
- C/S和B/S的异同
- 放开那个程序员
- BZOJ 2877 NOI2012 魔幻棋盘 二维线段树
- C语言基础:C语言指针(5) - 指针和数组
- C++拷贝构造函数和赋值构造函数
- Mastering JavaServer Faces 2.2
- 嵌入式概论(Requirements Engineering of Embedded Systems)——嵌入式系统定义阶段和系统分析阶段
- Ubuntu14.04中交叉编译Qt库
- 用CFileFind实现的递归查找文件的函数
- 天声人語 20150107
- 56新建群聊---选择联系人之item布局
- ShareSDK分享到微信、微信朋友圈、QQ