——黑马程序员——C语言中的数组(四)

-----------android 培训 java培训 、java学习型技术博客、期待与您交流!-----------

字符数组和字符串指针的关系

一、字符串指针

定义:指向字符串的指针
一般形式:
char *变量名 = "字符串内容";
"字符串内容" 是常量
与字符指针的区别:
1、字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的,只能按对指针变量的赋值不同来区别,
2、字符串指针是将常量字符串赋值给指针,
3、而字符指针是将字符变量的地址赋值给指针
4、字符指针输出时为printf("%c",*p); 而字符串指针输出时为printf("%s",str); 因为以前我们学习过字符串是存到字符数组当中的,要输出时需要传数组名,现在用字符串指针输出时也是只需传个地址就可以,str就是字符串的首地址
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char a = 'b';
	char *p = &a;
	//定义一个字符串指针
    char *str = "Hei Ma Xun Lian Ying!";
    //打印字符串
    /*以前用字符数组存储字符串,打印时使用的是一个字符数组名(即地址)
    此处用字符串数组时只需传个地址有可以,所以是str
    */
    //输出字符串指针
    printf("字符串为:%s\n",str);
    //输出字符指针
    printf("字符为:%c\n",*p);
	system("pause");
	return 0;
}

例如:
char ch = ‘b’;
char *p = &ch; 
4、定义时初始化
char *str = "HeiMa";
字符串指针保存的是字符串常量的首地址,也是字符串的第一个字符的地址,str是指针变量,可以指向任意一个字符串;例如:str = "I love HeiMa"
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定义一个字符串指针
    char *str = "Hei Ma Xun Lian Ying!";
    //打印字符串
    //输出字符串指针
    printf("字符串为:%s\n",str);
    //输出字符
    printf("  sizeof(str) = %ld\n",sizeof(str));//32位编译器上指针占4个字节
    printf("字符串指针地址= %p\n",str);
    
    //字符串指针的长度
	printf("str len = %ld\n",strlen(str));
	system("pause");
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int main()
{

	//定义一个字符串指针
    char *str = "Hei Ma Xun Lian Ying!";
    //打印字符串
    //输出字符串指针
    printf("字符串为:%s\n",str);
    //str指向别的字符串
	str = "I Love HeiMa ";
    //字符串指针的长度
	printf("重新指向后:%s\n",str);
	system("pause");
	return 0;
}

注意:

1、使用字符数组保存的字符串,地址是保存在内存栈区,是可读可写的,可以修改字符串中的内容
2、使用字符串指针保存的字符串,保存的是字符串常量的首地址,保存在内存的常量区,常量区是只读的,所以不可以修改字符串中的内容
3、不能直接接收从键盘输入,需要先给这个指针申请空间,才能使用;或者定义一个字符数组,让一个字符指针指向该字符数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定义一个字符数组保存字符串
    char ch[] = "abc"; //存储在栈区,可读可写
    //修改字符数组中的内容
    ch[2] = 'Z';
        //打印出字符数组的内容
    printf(" %s\n",ch);        

	//定义一个字符串指针
    char *str = "Hei Ma Xun Lian Ying!";
    int i,j;
    
	printf("%c \n",*str);  
    
    //*str = 'Z'; 此写法编译器会报错
    
    //获取字符串中的每个字符
    for(i = 0; i < strlen(str); i++)
    {
		printf("%c ",*(str++));
    }
    
     printf(" \n");
	//修改字符串指针所指的字符串中的内容
	
	system("pause");
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int main()
{
//第一种解决方法:
	//定义一个指针并申请空间
    char *str = malloc(100);
    //接收键盘输入
    scanf("%s",str);
    //打印出字符串
    printf("第一种方法:%s\n",str);
    printf("\n\n");
    
 //第二种解决方法
	//定义一个字符数组
    char ch2[100];
    //定义一个字符指针并指向字符数组ch2
    char *p = ch2;
    //接收键盘输入
    scanf("%s",p);
    //打印出字符串
    printf("第二种方法:%s\n",p);
    
	system("pause");
	return 0;
}

二、char 型指针数组

1、char类型指针数组
作用:用来存放字符串首地址的数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
	// char类型的指针数组
    char *name[3] = {"Ghhjjjfgdfgfdgfd","Jkkyuyuyouio","Yiidsfsagsg"};
    
    int i;
    for(i = 0; i < 3; i++)
    {
		//打印出每个字符串
		printf("%s\n",name[i]);
    }
    system("pause");
	return 0;
}

三、字符串指针变量和字符数组的区别

1、两者都可以用来保存字符串
2、字符串指针变量本身是一个变量,存放的每个元素都是字符串指针,指向一个字符串,存放的都是字符串的首地址,是常量地址,里面的元素不允许修改,但是指针的指向可以改变,可以指向任何字符串
3、 字符数组是一个数组,可以更改字符串中的内容

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值