免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2547 | 回复: 15
打印 上一主题 下一主题

指针问题请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-12 16:07 |只看该作者 |倒序浏览
#include <stdio.h>
main()
{
  char **p;
  char *a = "hello";
  *p=a;
  printf("%s\n",*p);
}
结果:
hello
Segmentation fault
前一句打印结果是对的,可为何多出
后面的segmentation fault ?

另外,第二个问题
int a[5]={1,2,3,4,5};
int (*p)[5]; //p是指向有5个整数的一维数组的指针变量
p=a; //这样操作为什么是错的?

论坛徽章:
0
2 [报告]
发表于 2007-07-12 16:12 |只看该作者
本帖最后由 guanmj 于 2016-08-02 15:52 编辑


dddddddddd

论坛徽章:
0
3 [报告]
发表于 2007-07-12 16:17 |只看该作者
第二个问题:a是指向int的指针.&a才是指向int [5]的指针.
其实你这两个问题是同一个问题.

论坛徽章:
0
4 [报告]
发表于 2007-07-12 16:19 |只看该作者
#include <stdio.h>

int main(void)
{
  char **p ;
  char *a = "hello";
  p= &a;
  printf("%s\n",*p);

return 0;
}

论坛徽章:
0
5 [报告]
发表于 2007-07-12 16:38 |只看该作者
原帖由 baohuaihuai 于 2007-7-12 16:17 发表
第二个问题:a是指向int的指针.&a才是指向int [5]的指针.
其实你这两个问题是同一个问题.

谢谢,明白了,一维数组的数组名是指向列的也就是指向0元素。二维的数组名指向行。

论坛徽章:
0
6 [报告]
发表于 2007-07-12 16:40 |只看该作者
原帖由 guanmj 于 2007-7-12 16:12 发表
1.
*p=a;
这里错,改成p=&a;
2.直接int *p=a;不就行了吗


我是想测试 *p 这个指针变量。
也就是把 *p 直接指向 a
为何会出错???

论坛徽章:
0
7 [报告]
发表于 2007-07-12 16:49 |只看该作者
char **p;
p没有初始化,他的值是任意的
*p = a; //这句就把那块内存进行了写操作
你觉得这样不是很危险吗?

原帖由 cviolet 于 2007-7-12 16:40 发表


我是想测试 *p 这个指针变量。
也就是把 *p 直接指向 a
为何会出错???

论坛徽章:
0
8 [报告]
发表于 2007-07-12 17:49 |只看该作者

回复 #7 ypxing 的帖子

明白,如果p 指向系统核心使用内存,那就死定了。

论坛徽章:
0
9 [报告]
发表于 2007-07-12 18:05 |只看该作者

回复 #8 cviolet 的帖子

用户态进程还没有这么厉害的. 地址空间不同.

论坛徽章:
0
10 [报告]
发表于 2007-07-12 20:37 |只看该作者
原帖由 fcloudf 于 2007-7-12 16:19 发表
#include

int main(void)
{
  char **p ;
  char *a = "hello";
  p= &a;
  printf("%s\n",*p);

return 0;
}



a 是一维数组 a 代表着数组的首地址,
1、&a代表什么?好费解啊。
比如 int a[]={1,2,3}  a=数组首地址,并且是指向0列,类型是指向整型的。
可是 &a是什么,难道是指向一维数组的指针变量??
2、printf("%o\n",a)
     与 printf("%o\n",&a) 值是不等的。为什么??
测试代码如下:
#include <stdio.h>
main()
{ char **p;
  char *a="hello";
  printf("%o\n",a);
  printf("%o\n",&a);  //即便是&a 指向的是一维数组的类型
                      //  a 指向一维数组的第0个元素是指向整型类型
                      //至少 在值上它们应相等啊,为什么?                 
  //p=NULL;
  p=&a;
  printf("%s\n",*p);
}
如果是二维数组 a代表指向o行的指针,类型是一维数组型指针。
谁能开导一下下,先谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP