指向数组的指针(二维),该怎么解决
指向数组的指针(二维)
这个错误,我猜测是char*只能指向一维数组,以下是朋友改自己的
------解决方案--------------------
你的函数是错误的,
函数参数改为:
void printStr( char(*p)[一维数组大小] );
二维数组名做函数参数,只会转换为 行指针
------解决方案--------------------
都错了,见一楼
------解决方案--------------------
呵呵,,楼主的贴比较冷,,贴一个:
数组与指针
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级指针,想多少级就多少级,看你的理解,至于最后访问正不正确又是另一回事;
- 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
------解决方案--------------------
你的函数是错误的,
函数参数改为:
void printStr( char(*p)[一维数组大小] );
二维数组名做函数参数,只会转换为 行指针
------解决方案--------------------
都错了,见一楼
------解决方案--------------------
呵呵,,楼主的贴比较冷,,贴一个:
数组与指针
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级指针,想多少级就多少级,看你的理解,至于最后访问正不正确又是另一回事;