C语言中*a是什么意思啊?和数组一个用法吗? C语言一维数组a和&a的区别

作者&投稿:主父璧 (若有异议请与网页底部的电邮联系)
int *a表示a是一个指针,或者也可以是一个数组名,你可以理解为数组
既然a是指针,那么在指针前面加*号表示对该指针所指向的地址取值
所以*a=i;就是把i的值赋值给a指针所指向的地址的值,说起来有些拗口,其实就是说改变了a这个地址内存的值
*n=*n+1;也是一个道理,表示n指向的地址的值加1
a++;表示a地址加1,就是说本来a指向0x0000,那么现在就变了,a会指向另外一个地址,那么这个地址对应的值也会相应的改变。

建议:先找一本C语言的书,把指针一章的基本概念多理解一下,这些都是基础的东西,需要多体会。

1. 定义数组
int a[10]
a既是数组的名字,也是数组的地址,相当与从a这个地址连续分配了10个int内存地址

2.我们可以设定指针
int *p; //*p是int类型变量,p是指向int变量的指针
p = &a[10] // 将数组的地址赋值给p指针

3.很多人喜欢写成
int *p = &a[10]; //这个语句经常困扰人,可以拆分为 int *p; p = & a[10];

4.我们知道a是数组的地址,同时也是数组内第一个元素的地址,所以
int *p;
p = &a[10] = a;
也就是说a其实就是地址,*a就是指向了数组中的地一个元素,如果你要只想数组中的第i个元素可以写成
*(a+i); 其实*(a+i)==a[i]
*a == a[0]

5. 函数声明
void add(char a[ ]);和 void add(char *a);其实是一样的
因为在编译的时候都是讲数组的地址(就是数组收元素的地址)传递过去

6. 所以在用到数组的时候你只需要数组的第一个元素的地址(也就是函数名)就可以了
int a[];
int *a;
char a[];
char * a;

*a=i,就是说将i的值赋予*a,使指针a指向的地址中存入i的值。*n=*n+1也很好理解,比如指针n指向的地中之前存入的值为5,则上式的意思就等同于*n=5+1,指针n指向的地址中将存入数值6。a++的意思就是a指向的地址向后移一位。比如之前a指向数组b[0]的地址,则之后将指向b[1]。

这是个调用函数,没有返回值,
先是把两个地址赋值给a和n,
*a是一个指向整数类型的指针变量,*a=i就是把i得值赋值给*a,
*n=*n+1;就是把*n得值加1再赋值给*n;
a++;这个语句就是把a的值加1再使用

1、这是一个指针变量
2、和数组不一样,数组可以根据数组下标查找数据,指针取值要加地址偏移量

C语言:数组,*a和&*a有什么区别?~

1、本质区别
双引号里面的是字符串, 而单引号里面的代表字符。
2、输出区别
str = “a”输出的就是a这个字母;
str = ‘a’输出的测试65
3、底层区别
用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。

扩展资料:
C 语言中,逗号(,)也可以是运算符,称为逗号运算符(Comma Operator)。逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式,称为逗号表达式。其一般形式为:
子表达式1, 子表达式2, ..., 子表达式n
例如:a + b, c = b, c++
逗号运算符的优先级是所有运算符中级别最低的,通常配合 for 循环使用。逗号表达式最右边的子表达式的值即为逗号表达式的值。上例中,c++ 的值(c 自增之前的值)即为该表达式的值。
逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算。因此,上例中,c 得到 b 的值后,才进行自增运算。
参考资料来源:百度百科-C语言

简单的说,a是数组首元素的地址,即a 等于 &a[0]
&a是整个数组的首地址。
这两个值相同,但代表了不同的意思。如:a+1,偏移的是一个数组元素的大小,而&a+1,偏移的是整个数组的大小

*a和a[]有什么区别
答:区别是:char a[]定义的是一个数组,char *a定义的是一个指针。1.char a[]="asdf",这时候数组a是存放在函数的堆栈中的,函数推出时这个堆栈就被清除了。2.char *a="asdf","asdf"是一个常量,不存放在堆栈中,而是放在一个特殊的段当中。3.可以用printf("0X%x\t0X%x\n",name,a);看下。

c语言中二维数组(*a)[1]和*a[1]有什么区别,为啥他们的值不一样?_百度...
答:二维数组名是一个指向一个一维数组的指针,a是一个二维数组名,就是一个指向一维数组的指针,一个这样的指针求间接运输(*a),得带的是这个指针所指向的一维数组的数组名,在此是 a[0], 数组名加一个下标就是数组元素值,(*a)[1]就是 第0行数组的第1个元素 a[0][1]-->2 a[1]->...

c语言数组中*a为什么和a【0】相等
答:因为数组的首地址也就是数组名,你的数组名为a,则 * 意思是取内容,*a就是 a地址的内容 a地址又因为是首地址和a[0]一样,所以可以说*a=a[0]望楼主~~

C语言边写函数的时候要定义一个数组char*a和char a[]一样么?
答:也可以是字符串(即字符数组);而char a[]则是定义了一个元素个数不定的字符数组;具体来说,初始化时都可以说:char*a="asdasd";char a[]=asdasd";但是定义之后,*a可以将字符串整体赋给他,而char[]则不行,如*a="asdasww";是对的,但a[]="asdasww";绝对是不允许的!

C++语言中int(*a)[5]是什么意思
答:int (*a)[5] 数组指针,指向数组的指针,a这个指针指向了一个数组;int *a[5] 指针数组,装指针的数组,数组里面的每一个元素都是指针

二维数组中,*a和*a[0]为什么不同。
答:有恒等式: a[i] = *(a+i)所以,表达式里, *a[0] = *(*(a+0)) = *(*(a)) = **a.你的 *a 是一个星,而 *a[0] 是 2 个 星,当然不同。--- a不应该是返回以a 的值作为地址的那个空间的取值吗 -- 只有 当 a 是1维数组时才是对的。*a 等于 *(a+0) 等于 a[...

**A在C语言中是什么意思
答:通俗的讲,*A,A是个指针变量,*A是地址A中的内容,而**A说明*A也是一个地址。**A是*A地址中的内容。

C++ 中 int ***A;是什么意思?
答:int *a 是一个整形的指针 int **a 是对一个整形的指针的指针 int ***a 是对一个整形指针的指针的指针 我说的有点晕吧。一般如果是这个样子的话,目的是要开3维的数组。这样说应该明白了吧。

C语言中,* a和** a的区别是什么?
答:C/C++中,*可以表示乘法运算符,也可以表示指针;比如 int *a;就是声明了一个可以指向int类型变量的指针,大概就是一块内存,里面被允许放一个地址,这个地址里面是一个int类型的数据;而int **a;是声明一个二级指针,大概就是一块内存,里面放了一个地址,是一个指向int 型数据指针的地址,就是...

C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??
答:数组的意思是,一块内存 但C语言有没法同时对一整块内存中所有元素访问,还是得一个一个元素单独访问 而要访问单独元素,还是要通过单独的地址,那么最自然的方式还是通过首地址加上数组索引来访问 所以指针和数组,意义上一个是地址,一个是内存,但是用起来没有什么两样,而实际上它们就是同一个东西...