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 ...
随机推荐
- RabbitMQ 官方NET教程(四)【路由选择】
在上一个教程中,我们构建了一个简单的日志记录系统. 我们能够广播日志消息给所有你的接收者. 在本教程中,我们将为其添加一个功能 - 我们将让日志接收者可以仅订阅一部分消息. 例如,我们将能够仅将关键的 ...
- Redis学习笔记(四)-数据类型之list类型
redis的list类型其实就是一个每个子元素都是string类型的双向链表.所以[lr]push和[lr]pop命令的算法时间复杂度都是O(1).另外list会记录链表的长度.所以llen操作也是O ...
- SQL SERVER 2000 如何提高大数据筛选GROUP BY 的效率
数据库有83W条记录,本想计算20180101之后的每天赔付情况,故写了以下SQL语句: SELECT 起保时间,sum(赔付金额) as 日赔付 FROM maindata WHERE 起保时间&g ...
- ListView中动态显示隐藏HeaderView和FooterView
ListView中动态显示和隐藏Header&Footer 解决思路: 直接设置HeaderView和FooterView.setVisibility(View.GONE)无效, 布局仍然存在 ...
- PDO获取数据乱码的解决方法
确保PHP文件编码格式为UTF8 确保数据字段格式为UTF8 PDO中设置编码格式,有如下三种方式: 方式1: 写在初始化dsn中 define( 'DB_DSN', 'mysql:host=loca ...
- 控件中出现的e.xxxx之类的
在遇到窗体应用程序开发的时候,会在控件事件的后台写一些代码,特别是带e.xxx什么的 C#中的Graphics g = e.Graphics是什么意思? 解释是: Graphics 这个类,比较特殊, ...
- 【Oracle】数据迁移工具(1):SQL Loader
SQL Loader是一种数据加载工具,可以把外部数据加载到Oracle数据库中.SQL Loader中的参数有很多,本文只在第一部分中列出常用参数.要想运用SQL Loader工具 ,需要我们编辑一 ...
- Delphi 不用标题栏移动窗体
procedure TxxxxForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: I ...
- 【sqli-labs】 less29 GET- Error based -Impidence mismatch -Having a WAF in front of web application (GET型基于错误的带有WAF注入)
这关有点意思,有一点需要事先注意,这关玩的是login.php而不是默认的index.php 再注入之前需要先了解一下HPP(HTTP Parameter Pollution),详情参照这篇 http ...
- iproute2常用命令
#常用命令 ip link show #显示链路 ip addr show #显示地址(或ifconfig) ip route show #显示路由(route -n) ip neigh show # ...