+ -
当前位置:首页 → 问答吧 → char *p[]和 char p[][]的问题

char *p[]和 char p[][]的问题

时间:2011-12-18

来源:互联网

int main()
{
char *p[20];
char q[10][20];
//p[0][0] = 'a';这个赋值语句运行时报错
p[0] = "ok";
q[0][0] = 'b';
return 0;
}

作者: huangyongyou19890814   发布时间: 2011-12-18

不清楚。。。等高手吧!顶一下。。。

作者: yingzijuntuan   发布时间: 2011-12-18

//p[0][0] = 'a';这个赋值语句运行时报错
p[0][0]相当于: *(p[0]);因为p 是一个指针数组.它里面的指针都还没有初始化,你当然不想访问指针指向的内容*(p[0])访问第一个指针指向的内容(未知区域);

p[0] = "ok";
p[0][0];这样就可以访问了.因为p[0];已经初始化了.

q呢,他是一个二维的数组,他的元素是char类型,所以当然可以q[0][0] = 'b';这样访问

作者: mingliang1212   发布时间: 2011-12-18

char*[]p其中p[i]的类型是一个指向字符串的字符指针,但是只是进行了声明,并没有申请内存空间,即此时p[i]并没有指向任何内存空间,所以才会报错的。
char p[][]是声明了一个二维字符数组,已经分配了空间大小,所以不会出现问题,需要注意的是"ok"在字符数组中占用了三个字节,要记得包含结束符,所以要防止越界的问题

作者: weilandeyekong   发布时间: 2011-12-18

C/C++ code
#include <iostream.h> 

int main()
{
    char a[20] = "abc";
    char *p[20] = {a};
    char q[10][20] = {0};
    p[0][0] = 'a'; // 这个赋值语句运行时报错
    p[0] = "ok";
    q[0][0] = 'b';
    cout<<p[0]<<endl;
    cout<<q[0]<<endl;
    return 0;
}

作者: agoago_2009   发布时间: 2011-12-19

指针没有初始化

作者: sony_zhang   发布时间: 2011-12-19

#include <iostream.h>
int main()
{
  char *p[20];
  for (int i=0;i<20;i++)//加上这个for开辟空间就不会报错了
  {
  p[i]=new char ;
  }
  char q[10][20];
  p[0][0] = 'a';//这个赋值语句运行时报错//因为没有为p[20]开辟空间
  p[0] = "ok";
  q[0][0] = 'b';
  return 0;
}

作者: shenxinji   发布时间: 2011-12-19