char *str与*str的区别

C语言 码拜 9年前 (2016-04-21) 1380次浏览
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]={0};
//char *str=NULL;
gets(str);
printf(“%s”,str);
//fgets(str,100,stdin);
//fputs(str,stdout);
return 0;
}
如上,本人用char str[100]={0};初始化数组,运行后无错误。但是这样:char str[100]; *str=NULL;运行会提示出错。本人的问题是以上两种语句作用不同么?另外int *p与 *p 有什么区别呢?例如说char *str=NULL,与*str=NULL有什么区别
解决方案

5

char str[100]; *str=NULL;

等价于

char str[100]; str[0]=NULL;

C++中, NULL一般就是0,这句一般合法,C中NULL一般是 (void*)0,这就不行了,
怎能将指针付给char类型的数据呢

5

char str[100]={0};
这是在栈上分配了100个char内存,所以可以往这里面写东西
//char *str=NULL;
这个就一个指针,没分配内存,试图往它指向的内存写东西自然就挂了

5

引用:

首先,char str[100]={0};初始化只是将str[0]初始化了,其余元素并没有初始化。另外,在C语言中,NULL是宏定义的空指针,虽然其值在某种意义上是零,但它是指针类型,所以*str=NULL;在类型上是不一致的,所以会报错,正确的应该是str=NULL;

char str[100] = {0}; 会将 str 的全部元素初始化为 0 。
数组不是指针,不能被赋值,给数组赋值(str = NULL) 是错误的。

15

引用:

首先,char str[100]={0};初始化只是将str[0]初始化了,其余元素并没有初始化。另外,在C语言中,NULL是宏定义的空指针,虽然其值在某种意义上是零,但它是指针类型,所以*str=NULL;在类型上是不一致的,所以会报错,正确的应该是str=NULL;

你啥地方见过给数组赋值NULL这种用法?c++里面有么?
千万不要不确定的情况下误导人
实际测试一下就知道
char test[20];
test = NULL;
编译结果:error: incompatible types when assigning to type ‘char[20]’ from type ‘void *’
在c里面,数组初始化,一般来说就是示例中的赋值0,或memset为0,从来不可能出现NULL的用法,NULL一般只能给指针赋值,如 char *test = NULL;或 char *test;test = NULL;
题主对指针还是不太明白,需要再去看看教材。*test表明的是test指向的内容了,那么假如执行 *test = NULL;那么会给你一个警告,warning: assignment makes integer from pointer without a cast,test是指针,NULL是指针,而*test指的是内容
例如
int x = 12;
int *p;
p = NULL;
*p = 12;
p = &x;
本人装个编译环境,对不清楚的代码进行直接编译运行测试,对警告和错误进行分析,可以找到问题的原因。

10

char *str=NULL; 是在声明变量,并初始化为NULL,变量类型是char*类型, 这里*是代表是指针类型
*str=NULL  这里的*解引指针,也就是说让指针提向的值赋值为NULL
两处的*不是同一个意思

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char *str与*str的区别
喜欢 (0)
[1034331897@qq.com]
分享 (0)