多维数组实际执行起来都是一维数据,传递有两种方式
如传递char a[10][20]
接收函数可写成 void send(char *a) ->void recive(char *p)或者void send(a)-> void recive(char p[][10])
char a[10][20]相当于char (*a)[10],指上一个维度为10的数组,a+1往后偏移10个字节不是偏一个
a[2][3] 与 *(*(a+2)+3)相当 a是指向第一行数据首地址的指针,具体可看下面的实例,个人理解总结,不当之处可以指出
#include <list>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_AUDIO_PLAY_FRAME_CNT 20
#define MAX_AUDIO_PLAY_FRAME_LEN (1024*2)
#if 1
typedef struct
{
char* buf;
int datalen; /*音频数据长度*/
}audio_play_buf_t;
audio_play_buf_t m_data_buf[MAX_AUDIO_PLAY_FRAME_CNT];
std::list<audio_play_buf_t *> m_play_list;
#if 0
int i;
audio_play_buf_t* p_stream_data = NULL;
for( i = 0; i< MAX_AUDIO_PLAY_FRAME_CNT; i++)
{
m_data_buf[i].datalen = 0;
m_data_buf[i].buf = (char *)malloc(MAX_AUDIO_PLAY_FRAME_LEN);
if(NULL == m_data_buf[i].buf)
{
printf(" malloc fail \n");
return -1;
}
m_play_list.push_front(&(m_data_buf[i]));
}
for( i = 0; i< MAX_AUDIO_PLAY_FRAME_CNT; i++)
{
p_stream_data = m_play_list.front();
sprintf(str,"==%d== ",i);
memcpy(p_stream_data->buf,str,sizeof(str));
printf("%s\n",p_stream_data->buf);
m_play_list.pop_front();
}
for( i = 0; i< MAX_AUDIO_PLAY_FRAME_CNT; i++)
{
p_stream_data = m_play_list.front();
sprintf(str,"=**=%d== ",i);
memcpy(p_stream_data->buf,str,sizeof(str));
printf("%s\n",p_stream_data->buf);
m_play_list.pop_front();
}
#endif
char str[10] ;
void display(char *p)
{
int i,j;
for(i=0;i<3;i++)
{
//printf(" %d,%d,",p[i],p[i][1]);
for(j=0;j<3;j++)
{
printf(" %d,",*(p+i*3+j));
}
printf(" \n");
}
}
void display2(char p[][3])
{
int i,j;
for(i=0;i<3;i++)
{
printf(" %d,%d,",p[i],p[i][1]);
printf(" \n");
}
}
int main(int argc,char *argv[])
{
char ar[2][3][3]=
{
{
{0,1,2},
{3,4,5},
{6,7,8}
},
{
{10,11,12},
{13,14,15},
{16,17,18}
},
};
char ap[3][3]=
{
{0,1,2},
{3,4,5},
{6,7,8}
};
display((char *)ap);
display2(ap);
int i,j,k;
// for(k=0;k<2;k++)
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
// printf(" %d,",*(*(ar+i)));
}
printf(" \n");
}
}
return 0;
}