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 ...
随机推荐
- 关于改变安卓Button样式,这里有一个好方法。
首先,在drawable下创建一个新的xml文件(例如我创建的为button.xml).然后在里面输入以下代码. <item> <shape> <gradient and ...
- DNN:逻辑回归与 SoftMax 回归方法
UFLDL Tutorial 翻译系列:http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial 第四章:SoftMax回归 简介: ...
- texi格式文件的读取
使用texi2html可以将texi格式的文件转换成html格式的文件. sudo apt-get install texi2html 在对应目录下 texi2html filename.texi 或 ...
- c#如何用代码开启cmd指定命令(如:运行一个手机adb shell命令)
else if (this.Mode == TravelMode.AutoRecodeMode) { DateTime StartDate = DateTime.Now; string args = ...
- 偏函数应用(Partial Application)和函数柯里化(Currying)
偏函数应用指的是固化函数的一个或一些参数,从而产生一个新的函数.比如我们有一个记录日志的函数: 1: def log(level, message): 2: print level + ": ...
- 构造函数+原型的js混合模式
function Parent(){ this.name = "李小龙"; this.age = "30"; };Parent.prototype.lev=fu ...
- vue-属性传值 props
props属性传值 1.传具体的值 string(字符串) number(数值) boolean(布尔) 2.传一个引用 array(数组) object(对象) ----传引用----- 代码 ...
- ios开发——runtime
首先,最重要的一点,学runtime能干嘛? 1.使用runtime改变变量值 2.使用runtime交换方法 3.使用runtime添加方法 4.使用runtime给分类扩展属性 学了runtime ...
- html第五节课
格式布局 一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 示例: 二.position:absolute 1.外层没有position:absolu ...
- 在LINUX系统上通过LINUX命令安装mysql数据库和JDK环境
此示例通过Winscp工具和Xshell已验证通过 安装示例1: 在Centos6.5上安装JDK-10.0.2版本 检查LINUX系统是否有自带或者安装过的JDK版本:Java -version 查 ...