C语言中一维数组和指针有什么区别?
为什么像这样的会运行失败?char*b;b[0]='z';b[1]='d';b[2]='\0';...
为什么像这样的会运行失败?
char *b;
b[0] = 'z';
b[1] = 'd';
b[2] = '\0'; 展开
char *b;
b[0] = 'z';
b[1] = 'd';
b[2] = '\0'; 展开
5个回答
展开全部
数组直接保存数据,指针保存的是指向数据的地址,数组是一组数据的集合,就把数组比喻成一座房子,这座房子里有许多小房间,依次从0开始编号,每个小房间可以保存一个数据,而指针就相当于你保存了其中一个小房间的地址,望采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
声明了一个指针后,要给这个指针分配一个内存空间。
#include "stdlib.h"
b = (char *)malloc(长度* sizeof(char));//你可以理解为这样声明char b[长度];
char *b,声明后,内存为指针b开辟了一个存储空间,大小根据编译器决定,这个存储空间能存储一个32/64位的地址。而这个存储空间有可能刚刚被别的程序使用,而里面存有一个未知的值。所以如果不声明b所指向的地址的就使用指针的话,很有可能会访问到一块未知的空间而导致程序崩溃。分配完空间即可使用。对于char *指针,代表着*b每次存储的内容的长度只能是char的数据类型长度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针,它被用来存放地址用。
声明 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);
声明 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);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询