C语言 我想问一下这个程序

来源:百度知道 编辑:UC知道 时间:2024/05/27 11:33:19
#include<stdio.h>
#include<string.h>

void main()
{

int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int *p;
for(p=*a;p<*a+12;p++)
printf("%d\t",*p);
}

这个程序是对的
但是我有一个疑问
我觉得应该把循环里a前面的*去掉
就是这样for(p=a;p<a+12;p++)
因为我认为 p是一个地址 而数组名a正好也是一个地址 可以赋值 而如果是*a的话 就变成了一个数值 请问我这样想哪里错了???
2楼的 你的答案我看不懂啊。。。。。。。
int** 是什么啊 什么时候跑出来了2个*啊 一个我都弄不明白。。。。。。

二维数组.a是行地址,*a是元素地址
如果p=a.则p就是行地址,*p就是元素地址,而不是元素,输出的应该是地址

你想的是对的!

a[3][4]是这样理解的,int (*)[4]这是一种类型,此类型的变量的意思是一个指向4个int型数组的指针,a[0]、a[1]、a[2]都是这种类型的变量,而a又是a[0]...a[3]这个数组的头指针,所以a为指针数组的第一个元素的指针,指针级别为int **,与int * p自然类型不一样