C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??
答案:3 悬赏:70 手机版
解决时间 2021-02-13 04:30
- 提问者网友:焚苦与心
- 2021-02-12 08:48
C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??还有*(a) == a [0] 也是等价的,和上面的是一个意思吗?
最佳答案
- 五星知识达人网友:风格不统一
- 2021-02-12 09:14
因为数组从实现上来看其实就是指针啊。
#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;
}你可以自己试试。
#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;
}你可以自己试试。
全部回答
- 1楼网友:行雁书
- 2021-02-12 11:33
是等价的
指针的意思是,指向一块内存的首地址
有了首地址,就可以访问这块内存中的第一个元素
把指针加上一个数字,就会得到一个新的指针,就可以访问这块内存中的后面的元素
数组的意思是,一块内存
但C语言有没法同时对一整块内存中所有元素访问,还是得一个一个元素单独访问
而要访问单独元素,还是要通过单独的地址,那么最自然的方式还是通过首地址加上数组索引来访问
所以指针和数组,意义上一个是地址,一个是内存,但是用起来没有什么两样,而实际上它们就是同一个东西的两种不同写法,它们编译成机器指令后就完全分不清原来是怎么写的了
- 2楼网友:轮獄道
- 2021-02-12 10:53
if()
……;
是逻辑判断语句,如果括号内逻辑值为真,则继续执行下一条语句,否则不执行
计算机默认以“0”代表逻辑假,以“非0值”代表逻辑真
上述程序的意思就是不断从键盘向a赋值,直到赋给a的值为一个非0数
若a非0,则逻辑值为真,“!”表示取反,!a的逻辑值就为假,不执行下一条语句;从逻辑值的角度考虑:
if(a)等价于if(a!=0)
if(!a)等价于if(a==0)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯