精华内容
下载资源
问答
  • C语言指针与数组关系研究及应用.pdf
  • 主要介绍了C语言 指针与数组的详解及对比的相关资料,需要的朋友可以参考下
  • C语言 指针与数组

    2019-07-10 19:40:25
    C语言指针和数组关系十分密切,通过数组下标能完成的操作都可以通过指针来实现。 一般 用指针编写的程序比用数组下标编写的程序执行速度快 声明 int a[10]; 声明一个指向整型变量的指针 int *pa; 那么赋值...

    指针与数组

    在C语言中指针和数组关系十分密切,通过数组下标能完成的操作都可以通过指针来实现。

    一般 用指针编写的程序比用数组下标编写的程序执行速度快

    声明 int a[10];

    声明一个指向整型变量的指针 int *pa;   那么赋值语句pa = &a[0], 则将pa指向了数组a的第一个元素,也就是说pa的值为a[0]的地址

    这样赋值语句x = *pa, 就将a[0]的值赋值给了变量x。

    (1)无论什么类型,指针加1,就意味着指向指针所指对象的下一个对象

    (2)数组名代表数组第一个元素的地址

    pa = &a[0] 等价于 pa = a

    对数组 a[i] 的引用也可以写成*(a+i)这种形式

    在计算 a[i] 的值时,C语言实际上现将其转换为 *(a+i) 的形式

     

    注意:数组名和指针之间有个不同之处,指针是一个变量,可以对其进行赋值以及加减运算等操作,数组名不是变量,不能对其进行赋值和加减运算

    展开全文
  • c/c++(疑3) C语言指针与数组之间关系

    千次阅读 2015-04-08 08:55:13
    有了前面 两篇 基础,下面我们可以更深入的来介绍c/c++(疑3) C语言指针与数组之间关系 1 概述(C语言指针与数组之间关系) 指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址。...

    c/c++ (疑1)数组和指针

    c/c++(疑2) const extern

    有了前面 两篇 基础,下面我们可以更深入的来介绍c/c++(疑3) C语言指针与数组之间关系

    1 概述(C语言指针与数组之间关系



    指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址。指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到。

    数组就是数组,其大小与元素的类型和个数有关。定义数组时必须指定其元素的类型和个数。数组可以存任何类型的数据,但不能存函数。



    2     a 和&a 的区别为下文C语言指针数组和数组指针埋下伏笔



    来看看下面的代码
    <pre name="code" class="cpp">int _tmain(int argc, _TCHAR* argv[])
    {
    	int a[4]={1,2,3,4};
    	int *ptr0 = (int*)(int)a;//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc
    	int *ptr1=(int *)(&a+1);
    	int *ptr2=(int *)((int)a+1);//00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc
    	int *ptr3 = (int *)((int)a+2);//00 00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc 3c
    	int *ptr4 = (int *)((int)a+3);//00 02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc 3c d2
    	int *ptr5 = (int *)((int)a+4);//02 00 00 00 03 00 00 00 04 00 00 00 cc cc cc cc 3c d2 d8
    	int *ptr=(int *)(&a+1);
    	printf("%d,%d",*(a+1),*(ptr-1));
    	printf("%x,%x,%x,%x,%x,%x",ptr1[-1],*ptr2,*ptr3,*ptr4,*ptr5);//下一篇文章讲解
    	getchar();
    	/*
    	a  0x00C4F810
    	&a[0] 0x00C4F810
    
    	&a 0x00C4F810
    
    	*/
    	return 0;
    }
    


     
     上面的注释是我通过查看内存 和 汇编 的一些注释,也保留下来了,可能每台机器不一样,所以地址也不一样。
    
    解释说明:对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为T 的指针的移动,以sizeof(T) 为移动单位。因此,对上题来说,a 是一个一维数组,数组中有5 个元素; ptr * 是一个int 型的指针。

    &a + 1: 取数组a 的首地址,该地址的值加上sizeof(a) 的值,即&a + 4*sizeof(int),也就是下一个数组的首地址,显然当前指针已经越过了数组的界限。

    (int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr1。

    *(a+1): a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是a[0]的首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址,&a+1 是下一个数组的首地址。所以输出2
    *(ptr-1): 因为ptr 是指向a[4],并且ptr 是int * 类型,所以*(ptr-1) 是指向a[3] ,输出4。
    printf("%x,%x,%x,%x,%x,%x",ptr1[-1],*ptr2,*ptr3,*ptr4,*ptr5);//下一篇文章讲解(指针数组,数组指针
    相对稍有复杂,涉及到内存 和大小端,下次介绍!
    展开全文
  • C语言指针与数组详解

    千次阅读 多人点赞 2019-03-06 12:59:37
    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用。 1.指针与数组关系 当一个指针...

    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用。
    1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr;
    ptr=str;
    ptr 被置为数组 str 的第一个元素的地址,因为数组名就是该数组的首地址, 也是数组第一个元素的地址。此时可以认为指针 ptr 就是数组 str(反之不成立), 这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下 标变量访问,也可以用指针访问。
    2.指向数组元素的指针 若有如下定义:
    int a[10], *pa;
    pa=a;
    则 p=&a[0]是将数组第 1 个元素的地址赋给了指针变量 p。
    实际上,C 语言中数组名就是数组的首地址,所以第一个元素的地址可以用 两种方法获得:p=&a[0]或 p=a。
    这两种方法在形式上相像,其区别在于:pa 是指针变量,a 是数组名。值得 注意的是:pa 是一个可以变化的指针变量,而 a 是一个常数。因为数组一经被 说明,数组的地址也就是固定的,因此 a 是不能变化的,不允许使用 a++、+
    +a 或语句 a+=10,而 pa++、++pa、pa+=10 则是正确的。由此可见,此时 指针与数组融为一体。
    3.指针与一维数组 理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组
    织形式和对数组元素的访问方法。 一维数组是一个线形表,它被存放在一片连续的内存单元中。C 语言对数组
    的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标 变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的 内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。
    实际上编译系统将数组元素的形式 a[ i]转换成*(a+i),然后才进行运算。 对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:* (<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个 式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地 址的内容>。由此可见,C 语言对数组的处理,实际上是转换成指针地址的运算。
    数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指 针来实现,一个不带下标的数组名就是一个指向该数组的指针。
    4.指针与多维数组 用指针变量可以指向一维数组,也可以指向多维数组。但在概念上和使用上,
    多维数组的指针比一维数组的指针要复杂一些。 例如,在一个三维数组中,引用元素 c[ i][j][k]的地址计算最终将换成:
    *(*(*(c+i)+j)+k)。了解了多维数组的存储形式和访问多维数组元素的内 部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。
    1 指向数组元素的指针变量

    若有如下说明: int a[3][4]; int *p;
    p=a;
    p 是指向整型变量的指针;p=a 使 p 指向整型二维数组 a 的首地址。
    *(*(p+1)+2)表示取 a[1][2]的内容;*p 表示取 a[0][1]的内容,因为 p 是指向整型变量的指针;p++表示 p 的内容加 1,即 p 中存放的地址增加一个 整型量的字节数 2,从而使 p 指向下一个整型量 a[0][1]。
    2 指向由 j 个整数组成的一维数组的指针变量
    当指针变量 p 不是指向整型变量,而是指向一个包含 j 个元素的一维数组。 如果 p=a[0],则 p++不是指向 a[0][1],而是指向 a[1]。这时 p 的增值以一维 数组的长度为单位。
    5.指针与字符数组
    C 语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现 的。因为对于字符串来说,一般都是严格的顺序存取方式,使用指针可以打破这 种存取方式,更为灵活地处理字符串。
    另外由于字符串以′\0′作为结束符,而′\0′的 ASCII 码是 0,它正好是 C 语言的逻辑假值,所以可以直接用它作为判断字符串结束的条件,而不需要用 字符串的长度来判断。C 语言中类似的字符串处理函数都是用指针来完成,使程 序运行速度更快、效率更高,而且更易于理解。

    展开全文
  • c语言指针与数组

    2015-12-24 10:34:13
    1、指针数组元素指针在数组中,每一个数组元素在内存中都占用存储单元,都有相应的地址,数组元素指针就是数组元素的地址。 注:数组a不代表整个数组,只代表数组元素的地址。p=a表示把数组的首元素地址赋值给...

    1、指针数组元素与指针

    数组是由同一种数据类型的元素系列构成,数组元素按顺序存储在内存中,通过使用索引来访问数组元素。在c语言中,首元素的索引值为0,因此包含n个元素的数组的末元素索引n-1;
    要正确严谨的使用数组,因为编译器和程序运行都不会检查索引的合法。

    在数组中,每一个数组元素在内存中都占用存储单元,都有相应的地址,数组元素指针就是数组元素的地址。
    这里写图片描述
    注:数组a不代表整个数组,只代表数组元素的地址。p=a表示把数组的首元素地址赋值给指针变量p;

    #include<stdio.h>
    int main(){
        int a[4]={1,3,5,6};
        //定义一个指针类型的变量p,p指向数组中第一个元素地址
        //等价于  int*p=a;或者int *p=&a[0]; 
        int *p=a;
    
        printf("%d\n",*a);//输出第一个元素地址中的值 
        printf("%d\n",*a+1);//*a+1是在第一个元素值上加1printf("%d\n",*(a+1));//输出数组中第二个值 
        printf("%d\n",*(a+2));//输出数组中第三个值 
        printf("%d\n",*(a+3));//输出数组中第四个值 
    
        return 0;
    
    }

    运行结果:
    这里写图片描述
    这里写图片描述

    1. 指针的数值就是它所指向的对象地址。

      1. 在指针前用运算符*可以得到该指针所指向的对象的数值。
    2. 对指针加1,等价于对指针的值加上它指向的对象的字节大小。
    3. 数组名就是数组元素的首地址。
    4. a[i]和*(a+i)是意义等价的。
      基于此,数组与指针之间就有密切关系,我们就可以用指针标识数组的每个元素,并且得到每个元素中的值。

    2、指针操作

    指针变量可以执行8种基本操作,还可以使用关系运算符来比较指针。

    1. 赋值:把一个地址值赋值给指针。int a=2; int *p=&a;
    2. 求值:运算符*可以取出指针指向地址中存储的数值。
    3. 取指针地址:使用&可以得到存储指针本身的地址。
    4. 将一个整数加给指针:使用+运算符把一个整数加给指针。两种情况:一种情况下这个整数都会和指针所指类型的字节数相乘,然后把所得结果加到初始地址上。另一种情况,如果超出初始指针所指向的范围,那么这个结果是不确定的。
    5. 比较:可以使用关系运算符来比较两个指针的值,前提是两个指针具有相同的类型。
    展开全文
  • c代码-C语言 指针输出数组
  • 主要介绍了C语言指针数组与数组指针的区别,是C语言入门学习中的基础知识,需要的朋友可以参考下
  • ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778822_142150.png) !...!...!...!...想请教各位大佬这几个题中指针所代表的含义 如果能解释一下题目的解题过程就更好了 最近学指针 真的是被它搞得有点晕
  • 详解C语言中的数组指针与指针数组

    万次阅读 多人点赞 2018-05-06 21:52:39
    ·详解数组指针与指针数组 ·数组指针 一、区分 首先我们需要了解什么是数组指针以及什么是指针数组,如下图: int *p[5]; int (*p)[5]; 数组指针的意思即为通过指针引用数组,p先和*结合,说明了p是一个指针...
  • C语言指针与数组易混淆知识点(一)

    千次阅读 多人点赞 2016-03-25 15:59:17
    指针数组数组指针指向指针的指针 四程序陷阱 一、指针数组指针:指针本身也是一个变量,它的内容是指向的内容的地址。指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据。但是指针所...
  • C语言指针数组与数组指针关系

    千次阅读 2012-11-09 14:05:57
    指针与数组之间有指针数组与数组指针两种: 一:指针数组 先分析下面的例子: typedef unsigned char U8; //定义U8来代替unsigned char U8 *point[2]; //定义一个指针一维数组其3个元素为unsigned char类型...
  • C语言中,数组指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。数组下标表示法在编译期间将转换为指针表示方法,...
  • C语言指针数组与数组指针的区别

    千次阅读 2018-07-25 19:20:36
    指针数组是指:存放指针的数组 数组指针是指:指向一个数组的指针(是指针变量) 下面具体分析一下: (1)指针数组:int *p[10]; 因为[ ]的优先级高,所以[ ]先p结合成为一个数组,然后这个数组的类型为int*,...
  • C语言中关于数组指针与指针数组,二维指针二维数组、函数指针的总结知识点敲黑板先看这里注意:如果指针没有搞清楚,请先看我的关于指针数组的总结那篇。数组指针与指针数组二维指针二维数组函数指针总结 知识点...
  • C语言指针数组指针作为参数

    千次阅读 2019-07-06 16:52:35
    //其实就是把形参数组也当成指针看待,是一个指向数组a的首地址的指针 int a[5]; //能引用的下标a[0] - a[4] a[0] = 85; a[1] = 70; a[2] = 98; a[3] = 92; a[4] = 78; printf("a[3]=%d,a[4]=%d\n",a[3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 197,714
精华内容 79,085
关键字:

c语言指针与数组关系

c语言 订阅