c18---数组和指针
//
// main.c
// day09 #include <stdio.h> int main(int argc, const char * argv[]) { int num = ;
int *numP = #
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 = # //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---数组和指针的更多相关文章
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- 《征服 C 指针》摘录3:数组 与 指针
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...
- C指针-数组和指针的归一
int bArr[] = {1,2,3}; int *iarr = bArr; *iarr = 6; printf("%d\n",*iarr); printf("%d\n ...
- 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同
数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...
- (C语言)数组与指针的区别
以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- 【C语言学习】《C Primer Plus》第10章 数组和指针
学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...
- C语言学习004:数组与指针
在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的
- C语言--指向多维数组的指针和指针数组
#include <stdio.h> //void show(char *p[]); ]); int main(){ ][]={","abc","x ...
随机推荐
- WebApi里面路由机制的原理以及路由匹配的过程
1.WebApi服务启动之后,会执行全局配置文件Global.asax.cs的 protected void Application_Start(){GlobalConfiguration.Confi ...
- Spring Boot (2) Restful风格接口
Rest接口 动态页面jsp早已过时,现在流行的是vuejs.angularjs.react等前端框架 调用 rest接口(json格式),如果是单台服务器,用动态还是静态页面可能没什么大区别,如果服 ...
- PL/SQL之基础篇
参考文献:<Oracle完全学习手册>第11章 1.PL/SQL概述 PL/SQL(Procedure Language/Structuer Query Language)是Oracle对 ...
- ★Java语法(六)——————————分支语句
1. if 语句 格式用法: if(布尔表达式) { 语句: } 2. if……else 语句 格式用法: if(表达式) { 语句1: } else { 语句2: } 3.if……else i ...
- 【PostgreSQL-9.6.3】函数(3)--日期和时间函数
在PostgreSQL中,DATE.TIME.TIMESTAMP是三种不同的数据类型.DATE表示日期类型,格式为YYYY-MM-DD或YYYYMMDD:TIME表示时间类型,格式为hh:mi:ss: ...
- NDK 使用STL
参考链接:Android中使用STL 1. 在 Application.mk 中添加代码"APP_STL:= gnustl_static"后, 文件中的内容如下: APP_ABI ...
- 【sicily】 1934. 移动小球
Description 你有一些小球,从左到右依次编号为1,2,3,...,n. 你可以执行两种指令(1或者2).其中, 1 X Y表示把小球X移动到小球Y的左边, 2 X Y表示把小球X移动到小球Y ...
- day003 python解释器、变量和数据类型基础讲解
Python解释器 打开官网https://www.python.org/downloads/windows/ 下载中心下载对应电脑版本的Python安装包,选择custom后一路next安装完成.过 ...
- 【转载】Java 反射详解
目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...
- Django—链接MySQL
Djalgo基础配置方法 静态文件配置方法 1 所有的静态文件都放在 static 文件夹下,例如Bootstrap值类的第三方库,通常 static 文件下会创建 css image js 文件,用 ...