C语言中一维数组和指针有什么区别?

为什么像这样的会运行失败?char*b;b[0]='z';b[1]='d';b[2]='\0';... 为什么像这样的会运行失败?
char *b;
b[0] = 'z';
b[1] = 'd';
b[2] = '\0';
展开
 我来答
DL学习交流
2020-07-28 · 超过11用户采纳过TA的回答
知道答主
回答量:40
采纳率:100%
帮助的人:7.2万
展开全部
C语言中,一维数组的数组名指向了这个数组的起始地址,而指针是它指向的某个东西的地址。例如定义int a[5],访问第二个元素可以用a[1],也可以用*(a+1)。当一个指针指向某个数组时,数组名和指针的作用应该是一样的。你定义的这个指针没有指向任何东西,是个野指针,不能通过类似于数组的方式使用。
拥抱每一天哦
2020-07-28 · TA获得超过267个赞
知道小有建树答主
回答量:751
采纳率:79%
帮助的人:69.1万
展开全部

指针都没初始化,运行个毛啊。

应该这样:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时光轨车永不停息
2020-07-29 · TA获得超过3267个赞
知道大有可为答主
回答量:2204
采纳率:55%
帮助的人:738万
展开全部
数组直接保存数据,指针保存的是指向数据的地址,数组是一组数据的集合,就把数组比喻成一座房子,这座房子里有许多小房间,依次从0开始编号,每个小房间可以保存一个数据,而指针就相当于你保存了其中一个小房间的地址,望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linjunlzy
2020-07-28 · TA获得超过1319个赞
知道小有建树答主
回答量:668
采纳率:82%
帮助的人:329万
展开全部

声明了一个指针后,要给这个指针分配一个内存空间。


#include "stdlib.h"
b = (char *)malloc(长度* sizeof(char));//你可以理解为这样声明char b[长度];


char *b,声明后,内存为指针b开辟了一个存储空间,大小根据编译器决定,这个存储空间能存储一个32/64位的地址。而这个存储空间有可能刚刚被别的程序使用,而里面存有一个未知的值。所以如果不声明b所指向的地址的就使用指针的话,很有可能会访问到一块未知的空间而导致程序崩溃。分配完空间即可使用。对于char *指针,代表着*b每次存储的内容的长度只能是char的数据类型长度。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2020-07-28 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5615万
展开全部
指针,它被用来存放地址用。
声明 char *b; 就是定了 一个存放地址 的单元,这个单元大小是4字节,里面 只能 放下 一个地址,而且 只能用于 指向 一个 char型数据。
一维数组 用于存放 数据, 例如 char s[10], 它有10个存贮单元,可以存放 10个 char 数据。
一个 char型数据 占 1个字节。
指针 没有存放数据 的空间。
让 char *b; 获得 存放数据 的空间,可以用 动态分配,例如
b = (char *) malloc(sizeof(char) * 10); 这样一来,它就有了 10个 char 数据 存放的空间了。
这样就正确了:
char *b;
b = (char *) malloc(sizeof(char) * 10);
b[0]='z'; b[1]='b'; b[2]='\0';
printf("%c %c\n",b[0],b[1]);
printf("%s",b);
另一个办法是让 b 指向 一个 已经有存放空间的 数组:
char *b;
char a[10];
b = a; // 让 b 指向a数组
b[0]='z'; b[1]='b'; b[2]='\0'; //于是就正确了
printf("%c %c\n",b[0],b[1]);
printf("%s",b);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式