int *p=5; //编译出错,这是不正确,应该赋值地址 printf("%d,%c\n",p,*a); //这里*a是指a[0],即字母a,格式符用%c printf("%d,%s\n",p,a);//这是a是字符串的地址,格式用%s,,输出字符串"abc"
这好解释啊,因为++是后++,要等到把(*--p)的值赋给y后(*--p)的值才会增1。所以结果是y=1,a[0]=2。你可以用下面的代码验证:int main(void){ int a[ ]={1,2,3,4},y,*p=&a[1]; y=(*--p)++; printf("%d %d\n",y,a[0]); return 0;} ...
A:p指向a的地址,*p自然为1;B:指针数值可以表现为数组的形式,第一个元素对应p[0];C:*&a等同于*p;
答案的确是144 其实就是a这个数组所有元素的和 这个主要是在这儿 int (*p)[4]=a;声明一个指向含有4个元素的数组的指针变量p,同时让他指向数组a的首地址 所以 (*(p+i)+j)==a[i][j]所以循环就是把a数组中的所有元素的值加到k变量上去,当然是144 ...
例如:int i=10; //定义了一个整型变量 int *p=&i; //定义了一个指针指向这个变量 int **p1=&p; //定义了一个二级指针指向p指针 那么取出10的值方式为:printf(“i=[%d]\n”,*p);printf(“i=[%d]\n”,**p1);
你好!A正确 B p=&n不正确,*p是指针p里的的值。而&n是地址。不能将地址付给整形值。应该 p=&n;C 应该是p,p已经是地址,D应该是*p,*p是值 如果对你有帮助,望采纳。
&a=a = a[0]=&a[0][0]。他们的值是一样的,都是地址,但是他们代表的步长不一样。步长体现在你做加法的时候,比如(&a++),地址就偏移了sizeof(int )*3*4的后面,到了这一片数组的后面,a++就是偏移了sizeof(int)*4,偏移到a[1],a[0]++就是偏移了sizeof(int),到了&a[0]...
void sort (int*a, int*b,int*c); int a,b,c; scanf("%d%d%d",&a,&b,&c); sort(&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c);}void sort (int *a, int *b,int *c){ int tmp; if (*a>*b) { tmp=*a; *a=*b; *b=tmp; } if (*a>*c) { tmp=*a; *a=...
c语言里,二维数组和二级指针完全是两回事 c语言里二维数组是由一维数组所组成的一维数组 int a[3][3];//a的元素是int[3] ,这里int[3]是一种数据类型(有3个int元素的数组),也就是说a[0]的类型就是int[3],那么a[0]的地址&a[0]的类型自然就是int(*)[3]了 p的类型是int**,&a[...
int a[5]={2,4,6,8,10},*p,**k;p=a;//p指向a数组,p保存了a数组的首地址。a[0]是数组的首元素,所以*p的值就是a[0]的值。k=&p;//k指针指向p,k保存了p的地址。(k可以成为指针的指针)printf("%d",*(p++));//表达式“*(p++)”整体的值相当于*p的值,就是a[0]的值...