C语言中已知int *p[10],如何对a进行定义,使p=a合法

已知int(*p)[10]这个数组指针,可以定义inta[10][10]使p=a合法但是如果定义的是int*p[10],不再是数组指针了,而是指针数组:那么定义int**... 已知int (*p)[10]这个数组指针,可以定义int a[10][10]使p=a合法
但是如果定义的是 int *p[10],不再是数组指针了,而是指针数组:
那么定义int **a 可以使 a=p合法
但是反过来呢?想让p=a合法,该怎么定义a?可以实现吗?
展开
 我来答
GTA小鸡
高粉答主

2018-02-01 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
p是数组名,数组名是常量指针,不能赋值。
更多追问追答
追问
那您看看我别的说的对吗?
追答
对的
藤原子大雄
2018-02-01 · TA获得超过7197个赞
知道大有可为答主
回答量:6977
采纳率:82%
帮助的人:1762万
展开全部
一. 野指针
所谓的野指针指的是一个指针变量指向了不可使用的内存空间。
产生野指针三个原因:
(1)指针变量创建时候没有被初始化:任何指针变量在创建的时候,不会自动成为NULL指针,它的默认值是随机的,因此该指针就会成为一个野指针,可能指向一块不可使用的内存空间。
例如char *p; 这样创建一个指针p,指向一个随机的内存地址空间
所以指针在创建的时候要被初始化,可以讲其初始化为NULL,或指向合法的内存空间
比如 char *p = NULL ; 或 char *p = new char; //这个时候p就不会是一个野指针
(2)delete或free指针之后没有把指针设置为NULL:delete和free只是把指针所指的内存空间释放掉,而没有对指针本身进行释放。
比如char *p = new char(4) ; delete[] p; //这时候指针p所指的内存空间被释放,但是指针p本身不为空,但是指针p所指向的内存空间已经不能使用,造成了野指针。正确的做法是及时的把指针p赋值为NULL
例如下面这个程序
char *p = (char *)malloc(100);
strcpy(*p, "hello");
free(p);
if(p != NULL){
printf("not NULL\n");
}
结果输出”not NULL“,验证上面的结论,应该在free之后马上把p = NULL。
(3)指针操作超过了指向内存空间的作用范围:当指针越界之后也会变成一个野指针
二. 空指针
空指针是一种特殊的指针,表示当前这个指针变量处于空闲状态,没有指向任何有意义的内存空间。
C++中用NULL来表示空指针,NULL是一个符号常量值为0。
三. 无类型指针
无类型指针指的是void *这种指针,表示可以指向任何数据类型。
比如
int n = 3;
int *p = NULL; //说明指针p此时空闲,没有指向任何有意义的内存空间
void *gp = &n; //无类型指针gp指向整型变量n
p = (int *)gp; //把无类型指针转换为整型指针
printf("%d\n", *p);
结果输出3,说明无类型指针可以转换成任何数据类型的指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式