【C/C++】深入理解指针和数组的关系
对数组名进行取地址运算
int a[] = {,,};
int (*p)[] = &a; //注意左值
对数组名取地址,得到的指针为指向整个数组的指针。
形参数组
形参为数组时勿须带数组长度,因为计算机不会处理,如果需要传数组长度,需要另外加参数。
一维数组指针
#include <stdio.h> //void array_add(int a[], int len)
void array_add(int *p, int len)
{
int i = ; for(i=; i<len; i++)
p[i]++;
}
int main(void)
{
int a[] = {,,};
int i = ;
int *p1 = a;
int (*p2)[] = &a;
int len = sizeof(a)/sizeof(int); array_add(a,len);
for(i=; i<len; i++)
printf("%d\t", a[i]);
printf("\n"); printf("a[1] = %d\n", *(p1+));
printf("a[1] = %d\n", p1[]);
printf("a[1] = %d\n", [p1]); printf("a[1] = %d\n", (*p2)[]);
printf("a[1] = %d\n", *(*p2 +)); return ;
}
二维数组指针
#include <stdio.h> //void array_add(int a[][], int len)
int array_add(int (*p)[], int row, int lines)
{
int i,j;
int result = ; for(i=; i<row; i++)
for(j=; j<lines; j++)
result += p[i][j]; return result;
}
int main(void)
{
//一个二维数组可以看做是两个一维数组,而a[0]和 a[1]分别是这两个一维数组的名字。
int a[][] = {,,,,,};
int (*p[])[] = {a, a+};
int (*p1)[] = a;//数组的名字代表指向数组首元素的首地址(这里二维数组的首元素是一个一维数组)
int (*p2)[][] = &a;//对数组名取地址之后,其指针指向整个数组,在这里p2指向整个二维数组,若p2+1,则跳过24个字节,即整个数组。
int *p3 = a[];
int (*p4)[] = &a[];
int b = a[][];
int *p5 = *a; //在这里a可以看做是指向行的地址,加*之后变成了指向列的地址。(这种描述方式只是便于理解)
int result = ; result = array_add(a, , );
printf("result = %d\n", result); printf("a[1][1] = %d\n", *(*(a+)+));
printf("a[1][1] = %d\n", *(*(p1+)+));
printf("a[1][1] = %d\n", p1[][]);
printf("a[1][1] = %d\n", (*p2)[][]);
printf("a[1][1] = %d\n", *(p3+));
printf("a[1][1] = %d\n", *(*(p4+)+)); return ;
}
【C/C++】深入理解指针和数组的关系的更多相关文章
- c/c++ 函数、常量、指针和数组的关系梳理
压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和 ...
- C/C++指针和数组的关系
首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...
- C指针和数组的关系详解
1.C中数组和指针的关系 对于任意类型的数组arr,对于同类型的指针类型parr(确切一点,可以假设类型为int,即int arr[], *parr).它们之间有如下"内幕": 1 ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- c语言指针,数组
指针:说简单点就是一个地址.例如int *p,p是个变量,里面放的是地址0x0000,同理,每一个指针,不管什么类型,都是地址,也就是空间都是4个字节(32位机). 以此类推,指针也有指向它的指针in ...
- C语言-再论指针与数组
指针与数组的天生姻缘1.以指针方式来访问数组元素(1).数组元素使用时不能整体访问,只能是单个访问.访问形式有两种:数组形式和指针形式.(2).数组形式访问数组元素:数组名[下标]:(下标从0开始(3 ...
- C语言基础:指针类型与指针和数组、字符串的关系
//指针变量就是用来存储地址的,只能存储地址 格式: int *p; 这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
随机推荐
- eclipse 找类的jar包方便工具
经常在开发过程,因为使用到比较多的类库(jar文件),在开发时经常会找不到需要的类文件存放在哪个jar文件中,这时classlocator这个插件就带我们带来极大的方便,可以帮我很快速的找到我们需要的 ...
- hihocoder第212周-动态规划
题目链接 import java.util.Scanner; public class Main { long mod = (long) (1e9 + 7); int MAXN = 107; int ...
- iOS与H5交互
H5与App原生交互,一般会是前端页面中的JavaScript与App使用的原生开发语言的交互.技术方案应能达到以下要求: 在js与原生进行交互的时候能保证正常的正向调用逻辑返回,反向可以处理异步回调 ...
- 树莓派进阶之路 (028) - 树莓派SQLite3的安装
MySQL占用内存太大,而SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景 ...
- 使用 WM_COPYDATA 在进程间共享数据
开发中有时需要进程间传递数据,比如对于只允许单实例运行的程序,当已有实例运行时,再次打开程序,可能需要向当前运行的实例传递信息进行特殊处理.对于传递少量数据的情况,最简单的就是用SendMessage ...
- HDU 4324 Triangle LOVE (拓扑排序)
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- React(0.13) 定义一个checked组件
<!DOCTYPE html> <html> <head> <title>React JS</title> <script src=& ...
- window 64bit 下react navtive安装
1.安装jdk 去这里安装对应的jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...
- mysql insert if not exists防止插入重复记录的方法(转)
MySQL 当记录不存在时插入(insert if not exists) 在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当 ...
- mongodb的serverstatus
MongoDB shell version: 2.0.5 connecting to: test { "host" : "TENCENT64.site", -- ...