char (*p)[100];
是指向一维数组的指针还是二维的呀?小弟先谢过了。
二维..
2维
这个问题??
那你应该先回答
char *p
是指向一维的数组还是二维的数组???
几维都可以,看你怎么用!
其实此次楼主的发贴涉及到一个打赌:
详情如下:(QQ群中的交谈)
笨笨(248406869) 11:31:05
你应该去面壁,我早上说指向二维数组有错吗?
Afra(967072) 11:31:16
有错
道号“虚无”(66488932) 11:34:17
指向一维数组
Afra(967072) 11:31:25
是指向一维数组
笨笨(248406869) 11:32:12
char a[4][80]是一维的?
道号“虚无”(66488932) 11:36:36
char *p ;
char array[9];
p = array;
难道能说p是指向一维数组的指针么?
道号“虚无”(66488932) 11:37:04
笨笨,应该去面壁了吧
笨笨(248406869) 11:34:12
怎么不能说
道号“虚无”(66488932) 11:39:06
笨笨,偶们上CSDN去请别人评理,输了的散100分
按支持的人数而定,如何?
道号“虚无”(66488932) 11:39:13
Afra(967072) 11:36:27
UP
晨风(24653420) 11:36:38
up
笨笨(248406869) 11:36:41
行呀
char (*p)[100];
数组指针啊
呵呵
我在群里已经看到了~~~
完了,楼上几位居然都说是二维.
char (*p)[100];
p是个指针,它指向的是 char [100];没错吧,这不就是指向一维数组么?
楼上几位的意思可能是:
char op[2][100];
char (*p) [100];
p = op;
这样认为p是指向二维数组?
我认为指向二维数组的指针应该是这样定义:
char (*p1) [2][100];
这样使用:
char array[3][2][100];
p1 = array; 可能又有人说这是指向三维数组的指针了.晕...........
是对的一个人支持就够了
这个是所谓的动态二维数组的创建
(=_=)
C99的
臭 道士自己在想想去,开饭拉........................
p表示的是一维数组的地址吧
这样比较着看一下就清楚了:
char *p[100]; VS char (*p)[100];
前者是一个数组。数组中的每一个元素是 char *。
后者是一个指针。指向的对象是 char [100]。
臭 道士 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄我是馒头哥哥
char (*p)[100];
准确地说
这个p是指向一个一维数组
但由于定义成 char (*p)[100]
所以它在进行+,-运算时与普通的char *q是不同的
普通的 ++q 等价与 q的地址移一个内存单元
但++p 地址移动的确是100个内存单元
这种特性使它可以做为类似一个二维数组来使用
因为 p[i][j]编译器解释为 p先移100*i个单元,再移j个单元
我看还是先讨论
char buff[10];
char *p = buff;
在以上这段程序中
p是一个指向一个一维数组还是单个元素???
关键是这儿的p可以有如下的使用方式
*p
p[i];
这样比较简单一些
这样说吧:
以最简单的:
char *p = NULL; 来说,按楼上诸公的说法来看,
p是指向一维数组的指针了? 我根本就没有让它指向数组,难道也算?
就char *p而言,它是指向什么的指针? 是指向char的指针.
谁能否认?
char (*p)[100];
是指向由100个元素组成的一维数组的指针变量,
怎么能说是二维的呢??
char a[4][100];
p=a;//p这时是a[0]的入口地址,也是a[0][0]的入口地址
cout<<*p<<endl;
cout<<*(*p)<<endl;
上面这两句结果可是不同的呀
我明确表态~~~
支持道长一派~~~
指向一维数组的指针
用法上若用[]访问则类似于二维数组的形式
定义一个指向二维数组的指针
char (*p)[2][100];
定义一个指向一维数组的指针
char (*p)[100];
定义一个指向char 的指针:
char *p;
谁能说我错了?
JJWW的半天,还发到九里打赌什么的切切切
不是九里是群里呵呵,还有笨笨怎么当偶徒儿的嘻嘻
道长说的有理。
一维,同意虚无
你说的没错.
char bb[3][10]={...};
char (*p)[10]=new bb;
这个算指向几维?
楼上写的是???
char (*p)[10] = new bb;//bb???
这么写吧:
int i, j;
char(*p)[j]=new char[i][j];
int i, j;
char(*p)[j]=new char[i][j];
p是指向由j个元素组成的一维数组的指针
是一维吧,只是用法是结合二维数组来用
呵呵,看你怎么理解了。两种理解都没有太大的问题。
可以理解为char[100]的指针,也可以理解为char **。
不过,从形式上看,一维可能更容易理解。
char (*p)[100] = new char[4][100];
上面的表达式左右两边“基本上”是等价的,右边明显是一个二维数组。从这个角度说,p是二维的也没有错。
如果二选一,我赞同一维的~~
测试代码:
————————————
#include<iostream>
#include<fstream>
template<class T, int i>
void fun(T (&p)[i])
{
std::cout << "void fun(T (&p)[i])" << ":i = " << i << std::endl;
}
template<class T, int i, int j>
void fun(T (&p)[i][j])
{
std::cout << "void fun(T (&p)[i])" << ":i = " << i << ", j = " << j << std::endl;
}
template<class T, int i>
void fun(T (*p)[i])
{
std::cout << "void fun(T (*p)[i])" << ":i = " << i << std::endl;
}
template<class T, int i, int j>
void fun(T (*p)[i][j])
{
std::cout << "void fun(T (*p)[i][j])" << ":i = " << i << ", j = " << j << std::endl;
}
int main(void)
{
char (*p)[100] = new char[4][100];
std::cout << "char (*p)[100] = new char[4][100]:" << std::endl;
fun(p);
char (*px)[100][100] = new char[4][100][100];
std::cout << "char (*px)[100][100] = new char[4][100][100]:" << std::endl;
fun(px);
char sz[100];
std::cout << "char sz[100]:" << std::endl;
fun(sz);
char arrsz[4][100];
std::cout << "char arrsz[4][100]:" << std::endl;
p = arrsz;
std::cout << "arrsz = " << p << std::endl;
p++;
std::cout << "arrsz = " << p << std::endl;
}
输出:
————————————
char (*p)[100] = new char[4][100]:
void fun(T (*p)[i]):i = 100
char (*px)[100][100] = new char[4][100][100]:
void fun(T (*p)[i][j]):i = 100, j = 100
char sz[100]:
void fun(T (&p)[i]):i = 100
char arrsz[4][100]:
arrsz = 0012FCC4
arrsz = 0012FD28
main()
{
char (*p)[100];
*p[0]="1";
printf("\n\np=%x *p=%x p[0]=%x p+1=%x *p+1=%x\n",p,*p,p[0],p+1,*p+1);
}
运行结果:
p=58b *p=58b p[0]=58b p+1=5ef *p+1=58c
5efH-58bH=64h=100
main()
{
char (*p)[100][10];
*p[0]="1";
printf("\n\np=%x *p=%x p[0]=%x p+1=%x *p+1=%x\n",p,*p,p[0],p+1,*p+1);
}
运行结果:
p=58b *p=58b p[0]=58b p+1=973 *p+1=595
973H-58bH=3E8H=1000
我给你们总结一下:
int i; i as an int
int *i; i as a pointer to an int
int **i; i is a pointer to a pointer to an int
int *(*i)(); i is a pointer to a function returning a
pointer to int
int *(*i[])(); i is an array of pointers to functions
returning pointers to an int
int *i[5]; i is an array of 5 pointers to int
int (*i)[5]; i is a pointer to an array of 5 ints
int *i(); i is a function returning a pointer to an int
int (*i)(); i is a pointer to a function returning int
int *(*(*i)())[5] i is a pointer to a function returning a
pointer to an array of 5 pointers to an int
写英文比较没有歧义,见谅!
int (*i)[5][5] i is ??????????????????
对于楼主的问题,p并不能说是指向二维或一维的指针,p应该这样描述:
p是一个指向数组的指针,这个数组的元素是具有100个char类型元素的数组。
而楼上的i,是一个指向数组的指针,这个数组的元素是具有5x5个int元素的二维数组。
int (*p)[N] ; //p是指针,指向一维数组
int *p[N] ;// p是数组 ,元素是指针
int (*p)[100];中的p是二维指针,指向一维的数组!
char (*p)[100];//p是一个指向一维数组的指针, 该数组有100个char型的元素。
char* p[100];//p是一维数组名, 该数组有100个元素,每个元素都是CHAR型指针
这里分歧点 又出来了一个:char (*p)[100];//p作为指针是几维的?
说是二维的难道是指针的指针?
由的程序中
//运行结果:
//p=58b *p=58b p[0]=58b
看来是一维指针呀?怎么说是二维指针
我同意P是指向一维数组的指针
p是指向一维数组的指针,他一般是个二维数组.
这没什么可争论的4,要是认为100个char为一个元素那就是一维,
要是认为一个char 为一个元素那就是二维,
要是一个 bit为一个元素,那就是三维
。。。。。。。。。。。。。。。。。。。。