首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-07 
指向数组的指针(二维)C/C++ code#includestdio.hvoid printStr(char *str,int row,int col){int i0,j0

指向数组的指针(二维)

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级指针,想多少级就多少级,看你的理解,至于最后访问正不正确又是另一回事;

热点排行