c语言指针和数组的联系

c语言指针与数组

  • **一、指针与一维数组**
        • 1.一维数组的存储方式
        • 2. 对一维数组名的理解
        • 3. 数组下标和指针的关系
        • 4.一位数组名与取数组首地址的区别
  • **二、指针与二维数组**
        • 1.二维数组的存储方式
        • 2.二维数组下标和指针的对应关系
    • 例题:

怀着忐忑的心情写了人生第一篇博客......诚惶诚恐......

主要内容:本篇博客主要是较为详细的解释指针与一维、二维数组的联系

一、指针与一维数组


1.一维数组的存储方式

  • 当我们定义了一个一维数组a时,编译器就会根据数组a的类型和元素个数分配一定的内存空间(该内存单元一定是连续的),并且这个内存单元一旦分配,便不会改变。

2. 对一维数组名的理解

  • 单独的一维数组名是一个指针常量,存放的是一维数组第一个元素的地址。 例:int a[2];
    对于数组a,如果我们单纯只是调用数组名a,它代表着数组首个元素即a[0]的地址。

3. 数组下标和指针的关系

  • 对于数组a[i],它永远等价于*(a+i)。

4.一位数组名与取数组首地址的区别

int array[5] = {1,2,3,4,5};
printf("%d  %d  %d",array,&array,&array[0]);
  • 由上述代码的输出结果我们可以知道array、&array与&array[0]的值是一样的。但是其意义是完全不一样的。array和&array[0]是一样的,代表数组首元素的地址;而&array代表整个数组的首地址。
    分开来看,array是一个地址,它也可以看作为array+0,而*(array+0)又是数组第一个元素的内容,也就 是array[0],所以array就是下表为0的元素的地址。
    对于&array,它是变量array的地址,而变量array的偶用范围是四个int空间,如果我们将&array赋给某 个变量p,那么p的类型应该是:int (*)[4]; 也就是指向包含4个int数据的数组的指针。
    之前看到过一个很通俗的例子:就像是陕西省政府在西安,而西安的市政府也在西安,两个政府都在线,其 代表的意义却完全不一样。

二、指针与二维数组


1.二维数组的存储方式

  • 按照先后的顺序依次储存,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为数组元素,显然每个行的数 组元素都是一个一维数组。

2.二维数组下标和指针的对应关系

对于 int a[3] [3],数组名a是数组首元素的地址。
&a代表整个数组,+1直接跳到数组末,是a升一级。
a是行行指针,+1跳到下一行。
*a是第一个数的指针,+1跳到下一个数。对于二维数组每一行都对应一个行地址,二维数组的地址就是第一行地址。
行地址:
a:第一行地址。
a+1:第二行地址
a+2:第二行地址
列地址:
a[0]+0:第一列地址
a[0]+1:第二列地址
a[0]+2:第二列地址

例题:

#include <stdio.h>
int main (void)
{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};int * pa[3] = { a[0] , a[1] , a[2] };int *p = a[0];int i;for( i=0; i<3; i++ ){printf(" %d   %d  %d",a[i][2-i],*a[i],*(*(a+i)+i));	printf("\n");  //*(*(a+i)+i),a+i//是矩阵a的第i行的地址,*(a+i)将被求第i行的第一个元素的地址。*(a+i)+i将被求值为第i行的第i//个元素的地址。*(*(a+i)+i)将被求值为第i行中的第i个元素的int整数值。}for( i=0; i<3; i++ ){printf("%d   %d",*pa[i],p[i]);printf("\n");}return 0;
} 

结果:

a[i][2-i]  =  3   *a[i]  =  1   *(*(a+i)+i)  =  1
a[i][2-i]  =  5   *a[i]  =  4   *(*(a+i)+i)  =  5
a[i][2-i]  =  7   *a[i]  =  7   *(*(a+i)+i)  =  9
*pa[i]  =  1   p[i]  =  1
*pa[i]  =  4   p[i]  =  2
*pa[i]  =  7   p[i]  =  3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android模拟器默认位置的修改

1.创建ANDROID_SDK_HOME环境变量&#xff0c;如ANDROID_SDK_HOMED:\eclipse_android\android-sdk 2.在ANDROID_SDK_HOME目录下&#xff0c;建立.android目录 3.默认的avd路径是C:\Users\Administrator\.android, 将里面的内容放入到ANDROID_SDK_HOME中的.android目录下 4.windo…

python 求出4行5列的二维数组周边元素之和

题目:求出4行5列的二维数组周边元素之和 代码&#xff1a; import random x [[random.randint(1,10)for j in range(5)]for i in range(4)] for item in x:print(item) y [x[0][0],x[0][1],x[0][2],x[0][3],x[0][4],x[1][0],x[1][4],x[2][0],x[2][4],x[3][0],x[3][4]] prin…

android表白app

一、前言 马上就要520和521了&#xff0c;是不是还有像我一样的单身狗啊。我就知道有&#xff0c;所以这两天简单写了这个小程序&#xff08;其实是替别人写的&#xff09;&#xff0c;虽然我并不会用去骗女孩子&#xff08;因为最近太忙了&#xff0c;实习完之后要搞毕设&…

c语言:malloc函数的简介

文章目录一、为什么需要malloc函数&#xff1f;二、如何使用malloc函数&#xff1f;三、用malloc函数自定义数组长度一、为什么需要malloc函数&#xff1f; 用于解决传统数组以下缺点。 ①传统数组的长度必须要事先指定。 ②传统数组的内存无法手动释放。 ③传统数组的长度定义…

webpack+react+es6开发模式

一、前言 实习了两个月&#xff0c;把在公司用到的前端开发模式做个简单的整理。公司里前端开发模式webpackreactreduxes6&#xff0c;这里去掉了redux。 webpack, react, redux等学习网址&#xff1a;http://www.cnblogs.com/hujunzheng/p/5405780.html 二、简单的步骤条组件 …

c语言输入字符时控制符%c前加空格的原因解释

文章目录一、前景知识1、缓冲区2、标准输入流二、scanf语句的执行1、scanf对于整形%d的输入2、scanf对于字符%c的输入在编一个代码时偶然间发现一个知识盲点…用scanf语句输入字符时需要在控制符%c前加空格。在解释相关这个原因前我们需要了解几个相关知识点。 一、前景知识 1…

git命令分类图

转载于:https://www.cnblogs.com/hujunzheng/p/5560826.html

python中为什么没有自增或者自减

在c语言和c中我们经常会用到自增或者自减的语句&#xff0c;但对于python中如果运用这种格式便会报错…why&#xff1f; 一、预备知识 小整数池 python中为了提高储存效率&#xff0c;对于int类型的整型变量的储存&#xff0c;有一个专门的小整数池&#xff0c;它会存放-5到256…

数据结构算法模拟系统

一、前言 学习数据结构已经有很长时间了&#xff0c;加上之前搞过一段时间的ACM&#xff0c;虽然搞得并不怎么样吧&#xff0c;但是喜欢的东西不能放弃&#xff0c;一直打算写一个算法模拟系统&#xff0c;对常用的一些算法进行简单的模拟&#xff0c;于是我的毕业设计就这样诞…

python语言map函数及map object at 乱码错误

文章目录一、map函数的简介1、map函数的作用2、语法格式3、举例例1、例2、二、报错一、map函数的简介 1、map函数的作用 对某个序列以给定的函数格式作映射。 2、语法格式 map(function,iterable)   function可以填函数&#xff0c;也可以填数据类型 3、举例 例1、 a [1,2,…

推荐几款jquery图片切换插件

一、前言 毕业季到了&#xff0c;大家都在匆匆忙忙的记录大学里最美好的时光&#xff0c;照片中各种花式、各种姿势都涌现出来了。这么多的照片怎么展示出来给自己的好友看呢&#xff1f;有人选择做成视频&#xff0c;有人选择ps之后做成图片集&#xff0c;而我选择利用静态网页…

c语言表白

马上就要520了&#xff0c;不少小伙伴们一定开始想尽各种办法进行表白了…那么身为奔跑在程序员道路上的我们也一定要有独特的表白方法&#xff01; 下面是一段表白代码&#xff0c;请直接搬去用吧&#xff01;&#xff01;&#xff01; #include <stdio.h> void change…

java注意的一些细节问题

1. 大括弧作用域问题 public static void main(String[] args) {{int x;{int x;//编译错误&#xff1a;Duplicate local variable x}} } 2.boolean值的运算 public static void main(String[] args) {if(true && false) {}if(true & false) {}System.out.println(t…

python表白

马上就要520了&#xff0c;不少小伙伴们一定开始想尽各种办法进行表白了…那么身为奔跑在程序员道路上的我们也一定要有独特的表白方法&#xff01; 下面是一段表白代码&#xff0c;请直接搬去用吧&#xff01;&#xff01;&#xff01; import turtle import timedef hart_ar…

git revert和reset区别

1.在github上建立测试项目并克隆到本地 2.本地中新建两个文本文件 3.将a.txt commit并push到远程仓库 执行 git add a.txt, git commit -m "a.txt", git push 4.将b.txt提交到本地仓库&#xff0c;不执行push 通过gitk命令查看提交历史如下&#xff1a; 情景&#xf…

python基础知识点整理(1)

目录一、变量与数据类型1、变量① 变量的命名规则2、字符串常用的库函数二、列表1、列表的基础定义2、列表常用的库函数3、for循环与列表4、列表切片5、元组三、if语句四、字典1、字典定义2、对字典的操作一、变量与数据类型 1、变量 ① 变量的命名规则 只能包含数字、字母以…

sorl6.0+jetty+mysql搭建solr服务

1.下载solr 官网&#xff1a;http://lucene.apache.org/solr/ 2.目录结构如下 3.启动solr&#xff08;默认使用jetty部署&#xff09; 在path路径下将 bin文件夹对应的目录加入&#xff0c;然后输入 solr start&#xff08;或者 solr start -p port&#xff0c;指定端口启动&am…

Maven中安装本地Jar包到仓库中或将本地jar包上传

摘要 maven install 本地jar命令格式 mvn install:install-file -DgroupId<group_name> -DartifactId<artifact_name> -Dversion<version_no> -Dfile<path_of_the_local_jar> -Dpackagingjar -DgeneratePomtrue 示例 mvn install:install-file -Dgroup…

二维码登录原理及生成与解析

一、前言 这几天在研究二维码的扫码登录。初来乍到&#xff0c;还有好多东西不懂。在网上看到有人写了一些通过QRCode或者Zxing实现二维码的生成和解码。一时兴起&#xff0c;决定自己亲手试一试。本人是通过QRCode实现的&#xff0c;下面具体的说一下。 二、二维码原理 基础知…

knockout+echarts实现图表展示

一、需要学习的知识 knockout, require, director, echarts, jquery。简单的入一下门&#xff0c;网上的资料很多&#xff0c;最直接就是进官网校习。 二、效果展示 三、require的配置 require.config.js中可以配置我们的自定义模块的加载。 require.config({baseUrl: ".&…