C语言指针三

一、指针和字符串

int main()
{
    char string[] = "I love China!";
    printf ("%s\n", string);
    printf ("%s\n", string + 7);
}
//I love China!
//China!

把s指针中的字符串复制到t指针中的方法
1、while( (*t=*s)!=null ){s++;t++;} 完整版本
2、while( *t=*s ){s++;t++;} 简单版本
3、while( *t++=*s++); 高级版本

/*strcat(s, t) 将t所指向的字符串复制到s所指字符串的尾部,用指针完成*/
void trcat(char *s, char *t)
{
    while(*s != '\0')
        s++;
    while(*t != '\0'){
        *s = *t;
        t++;
        s++;
    }
    *s = '\0';
}

int main()
{
    char s[10] = "yjy";
    char t[] = "girl";
    trcat(s, t);
    printf("%s\n", s);
    return 0;
}

二、字符指针变量与字符数组

char  *cp;char str[20];

str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址

char  str[20];     
str=“I love China!;    (X)
char   *cp;         
cp=“I love China!;     (V)

str是地址常量;cp是地址变量
cp接受键入字符串时,必须先开辟存储空间

例:

char  str[10];
scanf(%s”,str);    ()

而:

char  *cp;
scanf(%s”,  cp);    ()

改为:

char   *cp, str[10];
cp = str;
scanf (%s”,cp);      ()

字符串与数组的关系
联系:
1、字符串用一维字符数组存放
2、字符数组具有一维数组的所有特点
3、数组名是指向数组首地址的地址常量
4、数组元素的引用方法可用指针法和下标法
5、数组名作函数参数是地址传递等
区别
1、存储格式:字符串结束标志
2、赋值方式与初始化
3、输入输出方式:%s %c

char   str[]={“Hello!};                   (V)
char   str[]=“Hello!;                     (V)
char  str[]={‘H’,‘e’,‘l’,‘l’,‘o’,!};     (V)
char   *cp=“Hello”;                        (V)
int    a[]={1,2,3,4,5};                    (V)
int   *p={1,2,3,4,5};                      ()

char   str[10],*cp;
int    a[10], *p;
str=“Hello”;          ()
cp=“Hello!;          (X)
a={1,2,3,4,5};        ()
p={1,2,3,4,5};        ()

如果一个指针没有指向一个有效内存就被引用,则被称为“野指针”操作或空指针赋值。

三、字符串指针数组与字符串二维数组之间的区别

char str[3][10] = {"Wuhan", "Beijing", "Shanghai"};
char *pstr[3];
pstr[0] = str[0];
pstr[1] = str[1]; 
pstr[2] = str[2];

在这里插入图片描述

char *pstr[3] = {"Wuhan", "Beijing", "Shanghai"};

C语言指针三_第1张图片

你可能感兴趣的:(c语言)