指向数组的指针(二维),该怎么解决

指向数组的指针(二维)
C/C++ code
#include<stdio.h>
void printStr(char *str,int row,int col)
{
    int i=0,j=0;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
            printf("%c",*(str++));
        printf("  ");                                    /*每个单词结束输出一个空格*/
    }
    printf("\n");
}

void main()
{
    char str[2][4];
    
    str[0][0]='v';
    str[0][1]='e';
    str[0][2]='r';
    str[0][3]='y';
    
    str[1][0]='g';
    str[1][1]='o';
    str[1][2]='o';
    str[1][3]='d';
    
    printf("输出字符串:\n");
    printStr(str,2,4);
}


这个错误,我猜测是char*只能指向一维数组,以下是朋友改自己的
C/C++ code
#include<stdio.h>
void printStr(char **str,int row,int col)
{
    int i=0,j=0;
    char *str1=str;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            str1=str+i;                                    /*指向每行的行首*/
            printf("%c",*(str1+j));                            /*输出*/
        }
        printf("  ");                                    /*每个单词结束输出一个空格*/
    }
    printf("\n");
}

void main()
{
    char str[2][4];
    
    str[0][0]='v';
    str[0][1]='e';
    str[0][2]='r';
    str[0][3]='y';
    
    str[1][0]='g';
    str[1][1]='o';
    str[1][2]='o';
    str[1][3]='d';
    
    printf("输出字符串:\n");
    printStr(str,2,4);
}


C/C++ code
char **str
朋友说,是指向二维数组,可是这个不是多级指针么?我书上讲二维数组应该要用typedef什么的再来建立。。指针


------解决方案--------------------
你的函数是错误的,

函数参数改为:

void printStr( char(*p)[一维数组大小] );

二维数组名做函数参数,只会转换为 行指针





探讨
C/C++ code
#include<stdio.h>
void printStr(char *str,int row,int col)
{
int i=0,j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
printf("%c",*(str++));
printf(" "……

------解决方案--------------------
都错了,见一楼
------解决方案--------------------
呵呵,,楼主的贴比较冷,,贴一个:

数组与指针
http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?91173

其实在C数组都是一维的..

前提: 一个具有数组类型的表达式可以转换成其第一个元素的右值指针。--(1)

int arr[3];
arr 是数组,根据(1)可以隐式转换成首元素的指针,这时元素类型是int,所以可以转换成int*
int* p = arr;//正确.
int*p = &arr[0];//与上面效果一样.

int arr2[3][2];
arr2 是数组名,根据(1)可以隐式转换成首元素的指针,这时元素类型是int [2];//元素是一维数组s.所以可以转换成int(*)[2];//指向数组的指针.

int (*p)[2]=arr2;//正确.
int (*p)[2] = &arr2[0];//与上面效果一样.




实际上,在C语言中,除了在sizeof(),和&操作之外,其他情况都会转换成指针.

你试试:
int arr[3];
sizeof(arr);
int * p = &arr;//错;
int (*P)[3] = &arr;//对

数组名绝不不是就是指针.二维数组名更不是就是二维指针,详见我上面的链接....
------解决方案--------------------
#deifine YiWeiArraySize 3


#deinfine ErWeiArraySize 5

void f(char s[ErWeiArraySize ][YiWeiArraySize ])
{
int nPos1, nPos2;

for( nPos1 =0; nPos<ErWeiArraySize ;nPos++)
{

for(.....)
}

}

即可





------解决方案--------------------
楼主理解的不太对,N级指针,想多少级就多少级,看你的理解,至于最后访问正不正确又是另一回事;