C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??

C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??还有*(a) == a [0] 也是等价的,和上面的是一个意思吗?

是等价的

指针的意思是,指向一块内存的首地址
有了首地址,就可以访问这块内存中的第一个元素
把指针加上一个数字,就会得到一个新的指针,就可以访问这块内存中的后面的元素

数组的意思是,一块内存
但C语言有没法同时对一整块内存中所有元素访问,还是得一个一个元素单独访问
而要访问单独元素,还是要通过单独的地址,那么最自然的方式还是通过首地址加上数组索引来访问

所以指针和数组,意义上一个是地址,一个是内存,但是用起来没有什么两样,而实际上它们就是同一个东西的两种不同写法,它们编译成机器指令后就完全分不清原来是怎么写的了
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-07-29

因为数组从实现上来看其实就是指针啊。

#include <stdio.h>

int main(void) {
    int array_a[10] = { 100,90,80,70,60,50,40,30,20,10 }; //十个数
    int *p_array_a;
    p_array_a = array_a; //注意我这里没用取址符&
    
    printf("array_a : %p \n",array_a);  //array_a的起始地址
    printf("p_array_a : %p \n",p_array_a); //p_array_a指向的地址
    
    int i;
    for(i = 0; i < 10; i++) {
        printf("%d ",array_a[i]); //这里用数组方式访问数组内元素
    }
    printf("\n");
    
    for(i = 0; i < 10; i++) {
        printf("%d ",*(p_array_a+i)); //这里用指针方式访问数组内元素
    }
    
    return 0;
}

你可以自己试试。

本回答被提问者采纳

C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??
是等价的 指针的意思是,指向一块内存的首地址 有了首地址,就可以访问这块内存中的第一个元素 把指针加上一个数字,就会得到一个新的指针,就可以访问这块内存中的后面的元素 数组的意思是,一块内存 但C语言有没法同时对一整块内存中所有元素访问,还是得一个一个元素单独访问 而要访问单独元素,还...

C语言边写函数的时候要定义一个数组char*a和char a[]一样么?
但a[]="asdasww";绝对是不允许的!

C语言中char *a[ ]什么意思,他和char (*)a[ ]有什么什么区别?
char *a[]表示的是数组a[]是一个指向char的指针类型数组,相当于a[]里面的每一个元素都实际值都是一个指向字符串的指针(即存储某个字符串的首地址)后面这个你应该要问的是char (*a)[]吧,不然的话就和第一个一样了 char (*a) [N]表示的是指向一个元素为N的字符串数组的指针,说白了就...

c语言中*a与a[ ]的区别,有近似的意思吗?求大神
当*a指向数组a[],默认是第一项a[0].只要将指针移向下一位就到a[1],两位就是a[2].具体用*a++,a++等操作你应该知道 还有一种*a[]是指针数组 具体分类请看下面 ---指针--- int a=10;int *p=&a;---指针的指针--- int b=20;int *p=&b;int **p2p=&p;---简单数组--- int ...

c语言编程 int *a和int a [ ]有区别吗?
*a是定义一个整型指针变量a。int a [ ]没有这种写法。int *a[]1、定义a是一个数组。2、每一个数组的元素是一个指针,指向一个整数。(int *)a 将指针变量a强制转换为整型指针,说明a一般不是一个整型指针,也可以是个整型指针。int (*a)[]1、定义a是一种指针。2、a指向一种整数数组。

C语言中void fun(int a[])和void fun(int *a)等价么
等价, fun(int a[]) 会自动降级到 void fun(int *a);

C语言中*a[ ]是什么意思,和*a,a[ ]有什么关系
a:指针a a[]:数组a a[]:指针数组a,数组中存放的元素均为指针 (*a)[]:数组指针a,指向一个数组的首地址

c语言书上说a(i)和*(a+i)等价,我觉得不对啊
c语言 语句中,方括号 不是标点符号,而是 运算符.c语言 语句中,有恒等式: a[i] = *(a+i)a[i][j] 等于 (a[i])[j] 套恒等式公式,化成 ( *(a+i) )[j], 再化成 * (*(a+i) + j);类似地 a[j][i] 等于 (a[j])[i],套恒等式公式,化成 ( *(a+j)...

为什么C语言中二维数组的数组名a和*a表示的是同一个值?
其指向二维数组的首地址。于是a的值就是首地址的值。而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。于是a和*a的值是相同的。

C语言中数组指针*a[]与a[]有啥区别?
比如int;*a[]是数组指针,它的每个变量都是指针,比如int类型,每个成员都是int *指针,很多指针元素组成一个数组,而不是普通的变量类型。就好像普通家庭里组成的成员都是普通人;国务院里组成的成员都是大官,牛逼的人,呵呵 ;指针算是牛逼的人,但终究都是平民演变而成的,含义都是一样的 ...

相似回答