C语言字符数组,字符指针,指针数组(字符串)的比较与使用

小小仓鼠 / 2024-08-08 / 原文

参考文档https://blog.csdn.net/yuabcxiao/article/details/89600907

 

字符数组与字符指针

在C语言中,可以用两种方法表示和存放字符串:
(1)用字符数组存放一个字符串

char str[]="I am happy";

(2)用字符指针指向一个字符串

  char *str="I am happy";

字符数组

#include<iostream>
using namespace std;
int main()
{
    char ca[]="abc";//定义字符数组并初始化
    cout<<ca<<endl;
    return 0;
}

注意:字符数组的整体赋值只能在字符数组初始化时使用,不能给字符数组的赋值,字符数组的赋值只能通过对其元素一一赋值,如下:(数组初始化式只能用于声明同时赋值的情况下)

下面的赋值方法是错误的:
char str[20];
str="I am happy";  
对字符数组的各元素逐个赋值。
char str[10]={'I','','a','m','','h','a','p','p','y'};

字符指针

字符指针:字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为该串的结束。

#include<iostream>
using namespace std;
int main()
{
    char *ca="abc";//定义字符指针并初始化
    cout<<*ca<<endl;//输出a;
    cout<<*(ca+1)<<endl;//输出b;
    printf("%s\n",ca);//输出abc;

return 0; }

注意:若字符串常量出现在在表达式中,代表的值为该字符串常量的第一个字符的地址。所以”abc”仅仅代表的是其地址。原声明方式相当于以下声明方式:

char *a;  
a="abc";//这里字符串"abc"仅仅代表其第一个字符的地址