char *s char s[] 区别

# include
void main( )
{ char *s;
gets(s);
puts(s);
}
程序在运行时可能会出错,原因是__指针变量s未赋初值____。

答案是这样么? 我觉是因为*s分配的内存空间不能更改
因为即使是在 对*s 做初始化之后运行还是报错哇!

char *s、char s[]区别为:内容修改不同、计算操作不同、指针性质不同。

一、内容修改不同

1、char *s:char *s因为指向常量,所以内容不能修改。

2、char s[]:char s[]因为指代内存中的变量区,所以内容能修改。

二、计算操作不同

1、char *s:char *s是一个指针类型,可以进行计算操作。

2、char s[]:char s[]不是一个声明的指针类型,不能进行正常指针的加减计算操作。

三、指针性质不同

1、char *s:char *s是一个字符指针。

2、char s[]:char s[]是一个字符数组指针

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-06
char *s中的s是指针,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
char s[]中的s是数组首地址,而数组首地址对应着一块内存区域,其地址和容量在生命期里不会改变,只有数组的内容可以改变。
第2个回答  推荐于2017-10-15
首先你的程序要包含头文件<stdio.h>,因为你在程序中使用了库函数GETS()和PUTS(),其次,就是你提到的指针S初始化问题,GETS(S)是从键盘输入一个字符串赋给指针变量S所指向的变量(这个变量的地址就是指针S的值)~~你此处并未给指针变量S赋值,所以程序无法执行。追问

改成这样还是报错

#include "stdio.h"
#include "string.h"

void main( )
{ char *s="1111";
gets(s);
puts(s);
}

追答

S是指针变量,指针变量的值需要是同属性变量的地址,比方说你再定义一个CHAR A[10],将数组A的地址给S,即S=A(因为数组名就是这个数组的首地址),再运行下就可以了~

本回答被提问者采纳
第3个回答  2018-07-29
首先我们知道一点,*代表取值符。
其次,我们要明白一点,以为*p可指向以为数组,**p指向二维数组,***p指向三维数组......
最后()在不同的情况下有不同的含义。好现在开始讲解*char(**)与(char*)的区别
1、*char(**)应该表示一个指向二维数组的指针,其效果等同于一个三维数指针
2、(char*)我给出以下两种含义:
a、可定义一个字符型指针
b、将当前对象显示转换为字符指针类型
PS:希望对楼主有帮助。如有必要,希望楼主讲问题描述清楚,多放点代码进来,让我们知道这两句代码是在什么情况下的,因为往往不同环境下,相同代码有不同的含义。本回答被网友采纳
第4个回答  2008-08-03
一般的 指针char *a和 字符型数组char a[]完全没差别

char不同 指针指向的是char型的 但是++a后就是指向另一个char型数据了
相似回答