求C语言高手深刻解释一下这个问题

作者&投稿:贠朱 (若有异议请与网页底部的电邮联系)
printf("%d\n%d\n",a,&a); //为什么 a = &a ?? 我记得教科书上有清楚的介绍。 a=&a是C语言设计的规定!
a是数组名,a就表示数组的首地址,&a是取a的地址,在数值上两个是相同的,但意义不同!

a是数组首地址,也是a[0]的地址,a=&a[0],这两个意义是相同的!都表示一个“整型数据”的地址。
&a的意义是一个指向指针的指针,相当于一个二维指针
语言不好表达,举例供参考:
int (*pp)[4]=&a ; 这个pp是&a的真正意义
int *p=a ; 这个p是a的真正意义

#include <stdio.h>

int main()
{
int a[4] = {1,2,3,4};
int *p;
p = &a;//你这地方是不是写错了?p=&a[0]?
printf("%d\n%d\n",*p,*&a);//为什么p = &a,但是*p != *&a ??这个地方括号里面是不是&a[0]?
printf("%d\n%d\n",a,&a); //或者为什么 a = &a ??这哥地方是不是也写错了。。。
return 0;
}
。。。。。。??

对数组名求值就是数组首元素的地址。对数组名求址,这种写法是病态的,*&a可能被不同编译器解释成不同的东西。

正确写法是p = a;因为a是数组名,就是a[0]的地址,类型与int*同级别。

  int a[4] = {1,2,3,4};  //a 是一个数组,其实是一个指针。
    int *p;
    p = &a; // p指向a 的第一个位置。  
    printf("%d
%d
",*p,*&a);//为什么p = &a,但是*p != *&a ??  --->*p 是 p指向的位置的值,*&a = a , 见第一句的注释。
    printf("%d
%d
",a,&a);  //或者为什么 a = &a ??    

    // 欲知详情,见 这个网页:

http://hi.baidu.com/vhshiwen/item/7b3296f5cfb237b731c19914

    return 0;



p=&a只是将数组a的地址赋值给指针p,而不是说他们相等

C语言问题 解释下这个问题~

~表示取反:是一个单元(目)运算符,用来对一个二进制数按位取反,即将0变1,1变0.
而3的二进制形式为:00000011
所以~3的值为:11111100
而2+X的值为:00000010+00100111=00101001
^表示“异或”运算符:“异或”运算符也叫XOR运算符。它的规则是:若参加的两个二进制数同号,则结果为0,(假);异号则为1(真)。即0^0=0;0^1=1;1^1=0;1^0=1
所有这个表达式的最后结果为:00101001^11111100=11010101

#includeint main(){ int a[4][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}}; int max = 0; for(int i = 0; i max) { max = a[0][i]; } } } printf("%d
",max); return 0; }

c语言问题,求解释一下第10题,谢谢
答:第10题啊,因为ps和s是1个地址,所以ps[2]和s[2]都是字符0 , 所以A,B是对的,再看D, ps+= 2, 就是把ps指针移动了2个元素,指向了0,然后取内容,这样取出来的肯定是0 ,所以也是对的 ps+2 这个是个指针,并不是指向的内容,所以不是字符0 答案选C ...

以下有一段c语言程序 请高手详细解释一下
答:回答:#include"stdio.h" //声明:标准输入输出函数库 main() //主函数 {char bell; //定义一个char型的变量bell bell=7; //bell被赋值为七 putchar(bell); //把bell输出,在ASCII码中码值为7的,是声音“滴”,所以输出就是一个声音“滴” }//)这里错了哦,应该是‘}’ //大清早给...

c语言问题,麻烦解一下,用数学也可以。
答:这时候,你会考虑这样一个问题了——3位的3进制编码有多少个?答案是有3^3=27个(记做 3^N),比上面提到的24个编码还多3个。为什么要研究这个对称码?因为我们把A,B,C,D球放在左盘,把A’,B’,C’,D‘球放到右盘——与我们把A’,B’,C’,D‘球放在左盘,把A,B,C,D球放到右盘,...

C语言问题,请教高手解答!谢谢!!!
答:b[a[i]%3]+=a[j]; 一直在累加如图:后面累积tmp的代码就好理解了:所有a,b数组对应的余数的累加和乘积

C语言问题请大家指点一下
答:把字符串分解一下:\007 ABC \011 DE \012 FGH \0xA 说明一下:\0表示后面的数字是8进制数.\x表示后面的数字是16进制数.所以\007表示Ascii码为7的字符,而Ascii码为7的字符是不会显示的字符,只是让计算机的蜂鸣器叫一声(所谓的BEEP字符就是它)\011表示十进制数9,代表了制表符(TAB),所以输出...

问一道C语言的题目(解释一下..大概什么意思啊)
答:if(a<b) //如果a<b,赋值可知10<20,所以执行if下面的语句 if(b!=5)//b=20,所以b不等于5,所以执行if下面的语句 if(!ok1)//!ok1就是 !5,感叹号加一个不为零的数,结果为0,if(0)不执行if下面的语句 ,if(1)执行if下面的语句 x=1; //以上说了,这句不执行 else//执行 if(ok2...

C语言中的问题 新人麻烦详细解释一下谢谢了
答:选择C A, 转义字符\后直接跟数字,说明是八进制表示的ascii码值,而八进制中不会出现9,所以是错误的 B, 双引号包围说明是字符串,不是字符,不合题意 D, 同B理,是字符串,不是字符

...C语言的高手帮我解决下面的这个题目,并解释一下题目中的for(i=0...
答:答案是C,x的值是0.因为数组a是整型静态数量。默认初始化的值都是0.二重循环给数组赋值的范围是a[0][0]--a[0][2],a[1][0]--a[1][2],a[2][0]--a[2][2]其它都是0,此时j的值是3,最后一个循环计算a[0][3]到a[7][3]的和,是8个0相加,当然结果是0了。谢谢给予采纳!

C语言高手可以给我解释一下语句的这两处吗?
答:循环的原因是避开那些输入字符数大于9的串。所以循环,意思就是输入的字符数小于N才往下执行,那么现在的是s1就是字符小于N了。比如人为输入字符串长度大于N,那么就重新输入,之前输入的这个字符串就不再有作用了,

C语言问题求高手解答
答://问题主要在于保存姓名的数组应该定义成数组,而不是只定义指针,而没有分配实际的存储空间#include<stdio.h>#include<conio.h>#include <string.h>main(void) {int d[1000];int b[1000];int c[1000][20]; int i=0,m,v=0,sum,n,k=0,j,t,z;char a[1000][20]; //char *a...