位置:首页 > 软件操作教程 > 编程开发 > PHP > 问题详情

字符指针变量和字符数组在C语言的讨论

提问人:杨紫红发布时间:2020-11-17
(1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,决不是将字符串放到字符指针变量中。
(2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值;char  str[14];   str=“I love China.”;
对字符指针变量,可以采用下面方法赋值:
      char  *a;  a= “I love China.”;       /*赋给a的是串的首地址*/
(3)对字符指针变量赋初值:
        char  *a=“I love China.”;  等价于  char  *a;  a=“I love  China.”;
   而对数组的初始化:
        char  str[14]={“I love China.”}; 不等价于  char  str[14];
                                             str[]=“I love  China.”;

 即数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。

(4)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。 而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋一个地址值,则它并未具体指向一个确定的字符数据。这很危险。
       如: char  str[10]; scanf(“%s”,str);  是可以的
            char  *a;
            scanf(“%s”,a);   能运行,但危险,不提倡,在a单元中是一个不可预料的值。应当 char  *a,str[10];  a=str;  scanf(“%s”,a);
(5)指针变量的值是可以改变的,数组名虽然代表地址,但它的值是不能改变的。可以下标形式引用所指的字符串中的字符。
        如:main()
              {char  *a=“I love China.”;
               a=a+7; 
               printf(“%s”,a);  }
    又如:char str[]={“I love China.”};  str=str+7;  printf(“%s”,str); 是错的
 (6)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。也可以用字符数组实现,但由于不能采用赋值语句对数组整体赋值。
     如:char  *format;  format=“a=%d,b=%f\n”;  printf(format,a,b);
  等价于:printf(“a=%d,b=%f\n”,a,b);
  也可以:char format[ ]=“a=%d,b=%f\n”; printf(format,a,b);

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部