//
// main.c
// day09 #include <stdio.h> int main(int argc, const char * argv[]) { int num = ;
int *numP = &num;
num = ;
*numP = ;
// num == *numP
printf("%i\n", num);//
printf("%i\n", *numP);// int ages[] = {, , };
// 数组名保存的是数组的地址, 数组的地址就是首元素的地址
printf("ages = %p\n", ages);//0xff4c
printf("&ages[0] = %p\n", &ages[]);//0xff4c // 指针是专门用于保存地址
// 数据类型 *变量名称;
// 由于数组的首元素的地址就是数组的地址, 所以定义一个指针指向数组其实就是定义一个指针指向数组的首元素, 所以数组的首元素是什么类型, 那么指向数组的指针就是什么类型
int *p = &ages[];
int *p = ages;// 数组名也是地址类型int*,数组的首元素是什么类型那么数组指针p就是什么类型
printf("p = %p\n", p);//0xff4c
printf("&ages[0] = %p\n", &ages[]);//0xff4c // 如何利用指针操作数组
int ages[] = {, , }; ages[] = ;
printf("ages[0] = %i\n", ages[]); int *p = ages; // int *p = &ages[0]; &ages[0] == ages
printf("p = %p\n", p);////0xff4c
printf("ages = %p\n", ages); //0xff4c, p == ages; // 以为p指针中存储的值和ages中存储的值相同, 所以以前用ages的地方都可以使用p来替代
p[] = ;
printf("ages[0] = %i\n", p[]);// for (int i = ; i < ; i++) {
printf("p%i] = %i\n", i, p[i]);//889,3,5,二位数字好像不行
} int ages2[][] = {{, , },{,,}};
int *p2 = ages2;
for(int i=;i<=;i++){
printf("%i", p2++);//1,3,5,2,4,6,一维数组二维数组存储空间是连续的。
} int ages[] = {, , }; //ages占用12个字节,
int *p;
p = ages; // int *p = &ages[0];
printf("ages[0] = %i\n", ages[]);//
printf("*p = %i\n", *p);// printf("p = %p\n", p);//0xff4c
// p = &ages[1];
// 指针+1, 并不是真实的+1, 而是+4不是+8,
// 指针类型的两个用途: \
第一个用途, 取值的时候, 会根据指针类型所占用的字节去取出对应字节的数据 \
第二个用途, 用于做加法运算, 指针+, 其实是加上指针类型所占用的长度 , 如果当前指针类型是int, 那么+1本质上是加上4个字节
p = p + ;
printf("p + 1 = %p\n", p);//0xff50
printf("*p = %i\n", *p);//3 // p = &ages[2];
p = p + ;
printf("p + 1 = %p\n", p);//0xff54
printf("*p = %i\n", *p);// int a = ;
a = a + ;
printf("a = %i\n", a); // int num = ; //num占用4个字节
int *numP = &num; //numP占用8个字节
printf("num = %i\n", num); //10
// *numP 代表访问numP指向的那块内存空间
printf("*numP = %i\n", *numP); // char c = 'a';
char *cp = &c;
printf("cp = %p\n", cp);//0xffab
cp = cp + ;
printf("cp + 1 = %p\n", cp);//0xffac
cp = cp + ;
printf("cp + 1 = %p\n", cp);//0xffad,字符只占用一个字节 int ages[] = {, , };
int *p;
p = ages; printf("ages[0] = %i\n", *(p + )); //
printf("ages[1] = %i\n", *(p + )); //3, p = p + 1; *p;
printf("ages[2] = %i\n", *(p + )); // for (int i = ; i < ; i++) {
// 指针+1, 是加上指针类型所占用的长度
printf("ages[%i] = %i\n", i, *(p + i)); //1,3,5
} /*
只要一个指针指向了数组, 那么访问数组就有3种方式:
1. : ages[0];
2. : p[0];
3. : *(p + 0);
*/ printf("ages[0] = %i\n", [p]);//
return ;
}

c18---数组和指针的更多相关文章

  1. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  2. C语言核心之数组和指针详解

    指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...

  3. 《征服 C 指针》摘录3:数组 与 指针

    一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...

  4. C指针-数组和指针的归一

    int bArr[] = {1,2,3}; int *iarr = bArr; *iarr = 6; printf("%d\n",*iarr); printf("%d\n ...

  5. 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同

    数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...

  6. (C语言)数组与指针的区别

    以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...

  7. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  8. 【C语言学习】《C Primer Plus》第10章 数组和指针

    学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...

  9. C语言学习004:数组与指针

    在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的

  10. C语言--指向多维数组的指针和指针数组

    #include <stdio.h> //void show(char *p[]); ]); int main(){ ][]={","abc","x ...

随机推荐

  1. Spring Boot (8) 全局异常处理

    服务层和dao层的最终异常会交给controller处理,控制层的异常则会记录日志系统. 新建一个类用来处理异常,名字随便GlobalDefaultExceptionHandler.java,加上@C ...

  2. R 连接mysql数据库

    一.配置RODBC 1.R下载RODBC包,安装好.2.在http://dev.mysql.com/downloads/connector/odbc下载mySQL ODBC,安装好.3.windows ...

  3. DB120连接TTL--OpenWRT

    DB120 TTL线连接 1.解压文件安装USB TTL PL2303HX 驱动 2.插上usb转ttl设备 3.串口调试 4.连接ttl线到db120 5.The END

  4. 【转载】Servlet中的request与response

      一.HttpServletRequest概述   1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时, ...

  5. Django 框架入门

    1.创建虚拟环境.(如果你想在你的服务器中运行多个项目,那么装虚拟环境是最好的选择) pip install virtualenv pip install virtualenvwrapper 安装好后 ...

  6. 算法87-----DAG有向无环图的拓扑排序

    一.题目:课程排表---210 课程表上有一些课,是必须有修学分的先后顺序的,必须要求在上完某些课的情况下才能上下一门.问是否有方案修完所有的课程?如果有的话请返回其中一个符合要求的路径,否则返回[] ...

  7. vfs:open.c 源码学习

    nameidata路径查找辅助结构 open.c @do_sys_open @get_unused_fd_flags @do_filp_open 1.开始填充nameidata 2.开始填充file ...

  8. NFS实时备份

    方法一(inotify+rsync): 1.安装inotify-tools(客户端)[监听工具],实现数据属实备份检查目录是否有如下文档,没有表示操作系统不支持 ls -l /proc/sys/fs/ ...

  9. 【4】Django 创建第一个模块应用

    大成若缺,其用不弊.大盈若冲,其用不穷.大直若屈.大巧若拙.大辩若讷.静胜躁,寒胜热.清静为天下正 --老子<道德经> 本章内容 创建应用(app) 开发第一个视图(View) URL访问 ...

  10. linux下Qt程序编译运行

    Qt程序编译运行很简单,利用Qt提供的qmake工具可以很好的进行编译,在命令行输入一下编译过程:qmake -project    //声称项目文件(*.pro)qmake              ...