精华内容
下载资源
问答
  • 使用字符数组和指针变量都能实现字符串的存储和运算,但它们两者之间是有区别的,不应混为一谈,主要有...可以对字符指针变量赋值,但不能对数组名赋值。 可以采用下面方法对字符指针变量赋值: char *a; //a为字符指针

            使用字符数组和指针变量都能实现字符串的存储和运算,但它们两者之间是有区别的,不应混为一谈,主要有一下几点:

            (1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串中第一个字符的地址),绝不是将字符串放到字符指针变量中。

            (2)赋值方式。可以对字符指针变量赋值,但不能对数组名赋值。

            可以采用下面方法对字符指针变量赋值:

            char *a;  //a为字符指针变量

            a="I love China!"; //将字符串首元素地址赋给指针变量合法。但赋给a的不是字符串

                                                 //而是字符串第一个元素的地址

            不能用以下办法对字符数组名赋值:

            char str[14];

            str[0]='I'; //对字符数组元素赋值,合法

            str="I love China!"; //数组名是地址,是常量,不能被赋值,非法

            (3)初始化的含义。对字符指针变量赋初值:

            char *a="I love China!"; //定义字符指针变量a,并把字符串第一个元素的地址赋给a

    等价于

            char *a; //定义字符指针变量a

            a="I love China!"; //把字符串第一个元素的地址赋给a

    而对于数组的初始化:

            char str[14]="I love China!"; //定义字符数组str,并把字符串赋给数组中各元素

    不等价于

            char str[14]; //定义数组str

            str[]="I love China!"; //企图把字符串赋给数组中各元素,错误

            数组可以在定义时对各元素赋初值,但不能用赋值语句对字符数组中全部元素整体赋值。

            (4)存储单元的内容。编译时为字符数组分配若干存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元。

            如果定义了字符数组,但未对它赋值,这时数组中的元素的值是不可预料的。可以输出这些值,结果显然是无意义的。

            如果定义了字符指针变量,应当及时把一个字符变量(或字符数组元素)的地址给它,使它指向一个字符型数据,如果未对它赋予一个地址值,它并未指向一个确定的对象。此时如果向该指针变量所指的对象中输入数据,可能会出现严重后果。如下面这个错误做法:

            char *a; //定义字符指针变量a

            scanf("%s",a); //企图从键盘输入一个字符串,使a指向该字符串,错误。

    这种方法是危险的,因为编译时给指针变量a分配了存储单元,变量a的地址(即&a)是已经指定了,但a并未被赋值,在a的存储单元中是一个不可预料的值。应当在定义指针变量后,及时指定其指向。如:

            char *a, str[10]; //定义了字符指针变量a和字符数组str

            a=str;                //使a指向str数组的首元素

            scanf("%s",a);  //从键盘输入一个字符串存放到a所指向的一段存储单元中,正确

    先使a中有确定值,使a指向一个数组元素,然后输入一个字符串,把它存放在以该地址开始的若干单元中。

            (5)指针变量的值是可以改变的,而数组名代表一个固定的值(数组首元素的地址),不能改变。

       例1:改变指针变量的值

    #include<stdio.h>
    int main()
    { char *a=”I love China!”;
     a=a+7; //改变指针变量的值,即改变指针变量的指向
     printf(“%s\n”,a); //输出从a指向的字符开始的字符串
     return 0;
    }

            运行结果:

            China

            程序分析:指针变量a的值是可以变化的。printf函数输出字符串时,从指针变量a当时指向的元素开始,逐个输出各个字符,直到遇'\0'为止。而数组名虽然代表地址,但它是常量,值不能改变。

            char str[]={"I love China!"};

            str=str+7; //错误!

            printf("%s",str);

            (6)字符数组中各元素的值是可以改变的(可以对它们再赋值),但字符指针变量指向的字符串常量中的内容是不可以被取代的(不能给它们再赋值)。如:

            char a[] = "House"; //字符数组a初始化

            char *b = "House"; //字符指针变量b指向字符串常量的第一个字符

            a[2] = 'r'; //合法,r取代a数组元素a[2]的原值u

            b[2] = 'r'; //非法,字符串常量不能改变

            (7)引用数组元素。对字符数组可以用下标法(用数组名和下标)引用一个数组元素(如a[5]),也可以用地址法(如*(a+5))引用数组元素a[5]。如果定义了字符指针变量p,并使它指向数组a的首元素,则可以用指针变量带下标的形式引用数组元素(如p[5]),同样,可以用地址法(如*(a+5))引用数组元素a[5]

            如有:

            char *a="I love China!"; //定义指针变量a,指向字符串常量

    a[5]的值是字母'e'

       虽然并未定义数组a,但字符串在内存中是以字符数组形式存储的。a[5]*(a+5)处理。

            (8)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。

            例如:

            char *format;

            format="a=%d,b=%f\n"; //使format指向一个字符串

            printf(format,a,b);

    因此只要改变指针变量format所指向的字符串,就可以改变输入输出的格式。这种printf函数称为可变格式输出函数。

    也可以利用字符数组实现。例如:

            char format[]="a=%d,b=%f\n";

            printf(format,a,b);

    但使用字符数组时,只能采用在定义数组时初始化或逐个对元素赋值的方法,而不能采用赋值语句对数组整体赋值,例如:

            char format[];

            format="a=%d,b=%f\n"; //非法

    因此使用指针变量指向字符串的方法更为方便。

    展开全文
  • C语言是没有字符串类型的,字符串是存放在字符型数组中。C语言只有字符变量,没有字符串变量。...(2)赋值方式:可以对字符指针变量赋值,但对不能对数字名赋值。  可以采用下面方法对字符指针变量...

    C语言是没有字符串类型的,字符串是存放在字符型数组中。C语言只有字符变量,没有字符串变量。

    使用字符指针变量和字符数组的比较:

    (1)字符数组有若干个原始组成,每隔元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),绝不是将字符串放到字符指针变量中。

    (2)赋值方式:可以对字符指针变量赋值,但对不能对数字名赋值。

                可以采用下面方法对字符指针变量赋值:

    char *a;                   //a为字符指针变量
    a = "I love China";        //将字符串首元素地址赋给指针变量,合法。但赋给a的不是字符串,而是字符串第一元素的地址。

                不能用以下办法对字符数组名赋值:

    str[0] = 'I';                    //对字符数组元素赋值,合法!
    str = "I love China";            //数组名是地址常量,不能被赋值,非法!

    (3)初始化的含义,对字符指针变量赋初值:

    char *a = "I love China";//定义字符指针变量a,并把字符串第一个元素的地址赋给a

            等价于:

    char *a;                   //定义字符指针变量a
    a = "I love China";        //把字符串第一个元素的地址赋给a

            而对数组的初始化:

    char str[14] = "I love China"; //定义字符数组str,并把字符串赋给数组中各元素

            不等价于:

    char str[14];                //定义字符数组str
    str = "I love China";        //企图把字符串赋给数组中各元素,错误

            数组可以在定义时对各元素赋初值,但不能用赋值语句对字符数组中全部元素整体赋值。

    (4)存储单元的内容。

            编译时为字符数组分配若干存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元(32位机一般4B)

    (5)指针变量的值是可以改变的,而数组名代表一个固定的值(数组元素的地址),不能改变。

    char *a = "I love China";
    a = a + 7;                //改变指针变量的值,即改变指针变量的指向
    printf("%s\n", a);        //输出从a指向的字符开始的字符串
    char str[] = "I love China";
    str = str + 7;            //数组名虽然代表地址,但它是常量,值不能改变。不合法。

    (6)字符数组中各元素的值是可以改变的(可以对它们再赋值),但是字符指针变量指向的字符串常量中的内容是不可以被取代的(不能再赋值)。

    char q[] = "abcdefghi";
    printf("%c\n", *q);
    *q = 'c';            // 正确
    printf("%c\n", *q);
    char *p = "abcdefghi";
    printf("%c\n", *p);
    *p = 'c';            // 错误
    printf("%c\n", *p);

    (7)引用数组元素。

                字符数组可以用下表法(用数组名和下表)引用一个数组元素(如a[5]),也可以用地址法(如*(a + 5))。

                如果定义了字符指针变量p,并使他指向数组a的首元素,则可以用指针变量带下表的形式引用数组元素(如p[5]),地址法(如*(p + 5))引用数组元素a[5]。

    展开全文
  • 比如说这段: char *a="hello"; a[2]='c'; //就是这个语句为什么不正确啊
  • 本文系转载,原文的主要几点进行了提炼,想看更详细的内容,请看...指针p接收的就是字符串的地址,而不是字符串本身。似乎问题到这里就解决了,但原文做了更多的扩展解和释,我这里做了提炼(必有不足之处): 1.为

    本文系转载,对原文的主要几点进行了提炼,想看更详细的内容,请看原帖:
    https://blog.csdn.net/yichu5074/article/details/81701850?utm_source=app

    char* p = “How are you?”;
    这里双引号做了3件事:1.申请了空间(在常量区),存放字符串。2.在字符串尾加了‘\0’。3.返回地址。

    指针p接收的就是字符串的地址,而不是字符串本身。似乎问题到这里就解决了,但原文做了更多的扩展解和释,我这里做了提炼(必有不足之处):
    1.为什么可以把字符串赋值给字符指针,却不能给字符数组赋值?
    char array[] = “apply this function” ; // 这样是可以的,字符数组的初始化

    char array[];
    array = “apply this function” ; // 这样是不行的
    等号的左边必须是一个左值(在程序中占用内存空间,可以修改的量,相当于变量),而数组名代表的是数组首地址,是常量,不可改变的。

    2.指针可以自增,而数组不能自增(指针是地址变量,而数组是地址常量)。

    3.void指针不能进行指针运算,也不能进行*取值操作(所指向的对象类型不确定)。

    4.字符串是常量的情况:把字符串赋值给字符指针变量(不能修改里面的值)。
    char* p = “apply this function” ;
    p[0] = ‘a’; // 试图修改第一个字符,不会报错,但输出异常

    不是常量的情况:把字符串赋值给字符数组(可以修改里面的值)
    char array[] = “apply this function” ;
    array[0] = ‘a’; // 可以

    5.字符常量的类型可以理解为字符常量数组的类型。例如 “abcd" 的类型可以看成 const char[5]

    6.数组的类型是由该数组所存放的元素的类型数组本身的大小决定。例如,char s1[4] 和 char s2[5] 。s1的类型是char[4], s2的类型是char[5] 。

    7.sizeof()函数是用来求类型的字节数。

    8.对于函数参数列表中的以数组类型书写的形式参数,编译器会把其解释为普通的指针类型。如对于 void func(char sa[100],int sc[20],char* p), 则sa的类型为char*,sc的类型为
    int*,p的类型为char*。

    9.int array[] = {1,2,3,4};
    printf("%d\n",sizeof(array));
    结果是4,因为array的类型为int[4]

    char str[] = “What”;
    printf("%d\n",sizeof(str));
    其结果为5,因为str的类型是char[5]

    char str[10] = “What”;
    printf("%d\n",sizeof(str));
    其结果为10,因为str的类型是char[10]

    char* p = “abcdef”;
    printf("%d\n",sizeof§);
    其结果为4,因为p的类型是char*(指针是用4个字节存放地址)

    10.我们再用一组代码来看指针与数组的区别。

    	int inter[] = {
    		1,56,78,9,0
    	};
    	printf("%d\n",&string);
    	printf("%d\n",string);
    	printf("%d\n",&string[0]);
    	
    	printf("\n\n");
    	
    	char* p = "what";
    	printf("%d\n",&p);
    	printf("%d\n",p);
    	printf("%d\n",&p[0]);
    

    其结果为:
    在这里插入图片描述
    可以看到指针变量p有自己的内存地址。

    展开全文
  • 字符指针变量和字符数组 (1)字符数组由若干个元素组成,每个元素中放一个字符; 而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串...而对字符指针变量,可以采用下面方法赋值: char *a;a=“I love China...

    字符指针变量和字符数组

    (1)字符数组由若干个元素组成,每个元素中放一个字符;
    而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。
    (2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值 char str[14]; str=“I love China!”;
    而对字符指针变量,可以采用下面方法赋值: char *a;a=“I love China!”;但赋给a的不是字符,而是字符串的首地址。
    (3)指针变量的值是可以改变的,数组名虽然代表地址,它的值却不可改变。

    展开全文
  • 虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈……主要概括起来有以下几点:1. 字符数组由若干个元素组成,每个元素中 放一个字符,而字符指针变量中存放的是...
  • 虽然使用字符数组和字符指针变量都能实现字符串的存储和运算,但二者还是有区别的,不能混为一谈。 主要概括有以下几点: 1.字符数组由若干个元素构成,每个元素中存放一个字符,而指针变量存放的是字符串第一个...
  • 特别设置【每日一问】专栏,专业课--C/C++的复习的学习成果进行实践检验以及知识拓展,裂变自己接触和学习过的知识及技巧;主要是理论和实践相结合,以基础知识为主,实践操作为辅,保证学习效果,和大家一起回顾...
  • 特别设置【每日一问】专栏,专业课--C/C++的复习的学习成果进行实践检验以及知识拓展,裂变自己接触和学习过的知识及技巧;主要是理论和实践相结合,以基础知识为主,实践操作为辅,保证学习效果,和大家一起回顾...
  • * 经常会弄错字符指针变量和字符数组的使用方式 * 写在这里方便查阅 : * * (1)内容不同: * 字符数组由若干个元素组成,每个元素放一个字符。 * 而字符指针变量中存放的是地址(字符串第一个字符的地址),决...
  • 可以对字符指针变量赋值,但不能对数组名赋值。 初始化 字符指针变量可以先定义,再初始化;而数组在定义后,只能对其元素一个一个赋值,要想整体赋值,必须在定义数组时就初始化。 char * a="qwert"; 等价于 char ...
  • 虽然用字符指针变量和字符数组都能实现字符串的存储和处理,但二者是有区别的,不能...对字符指针变量,可采用下面的赋值语句赋值: char *pointer; pointer=“This is a example.”; 而字符数组,虽然可以在定义时...
  • 指针(Pointer)就是内存的地址,C语言允许用一个变量来存放指针,这种变量称为指针变量指针变量可以存放基本类型数据的地址,也可以存放数组、函数以及其他指针变量的地址。程序在运行过程中需要的是数据和指令的...
  • 这些字符串常量是不能改变的,如果试图改变指针所指向的内容是错误的 因为字符串常量是存在静态内存区的,不可以改变的。 如定义字符串常量: char* a="i love you."; a[3]='p'(非法操作)。 因为a[3]...
  • 虽然用字符指针变量和字符数组都能表示和处理字符串,但它们二者之间是有区别的,不应混淆。 (1)字符数组由若干个元素组成,每个...而对字符指针变量初始化不必加static,在实际执行时进行。 (3)赋值方式不同。对...
  • 该示例只是声明了一个变量 s,类型为 string,并没有它进行初始化,所以它的值为 string 的零值,也就是 “”(空字符串)。 来声明一个指针类型的变量试试,如下所示: var sp *string 发现也是可以的,但是它...
  • 区别:1、字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串...而对字符指针变量,可以用如下方法赋值:char *a; a="I love China ";注意,赋值给a的不是字符,而是字符串的第...
  • 字符串指针 字符串的首地址; 字符串指针变量 例:char *strp=“hello”; 定义了一个指向字符串的指针变量,并将字符串的首地址赋值给strp指针变量,...字符指针变量必须先赋值后使用,否则系统构成危险。因此,...
  • 教学目的: 掌握使用字符串指针引用字符串的方法。掌握字符串指针作函数参数的方法。 教学重点: 通过字符串指针引用...只能按对指针变量赋值不同来区别。 指向字符变量的指针变量应赋予该字符变量的地址
  • 1. 变量声明要单纯声明一个变量,可以通过 var 关键字,如下所示:var s string该示例只是声明了一个变量 s,类型为 string,并没有它进行初始化,所以它的值为 string 的零值,也就是 “”(空字符串)。...
  • 用字符数组和字符指针变量都可以实现字符串的存储和运算,但是两者是有区别的。在使用时,应注意以下几个问题: 1) 字符串指正变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在该首地址的一块...
  • 字符指针变量:指向字符串的头指针。 char* ps = “language”; //可写为:char* ps; ps = “language”; 字符数组=元素+元素+元素+。。。 static char s[] = {“language”}; //只能各元素逐个赋值修改 注意:...
  • 当我们声明了一个指针之后,这个指针变量中没有存储任何确定的地址值,而是一个...给指针变量赋值也有两种方式:  1.在声明指针时其进行初始化,也就是赋一个初值,初始化形式为:数据类型 *指针名=初始地址值;。
  • 用字符数组和字符指针变量都可实现字符串的存储和运算。 但是两者是有区别的。在使用时应注意以下几个问题: 1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块...
  • 当声明一个指针后没有其赋初值,指针变量没有存储确定的地址,而是一个随机整数。如果这时引用它所指的值可能会发生意想不到的问题(如修改了它指向系统重要数据)。所以我们要先赋值再引用。 需要注意的是:...
  • 赋值指针char*类型指针时编译器报错的问题 网上搜索后发现 char*是历史遗留问题,如果程序修改了字符变量变量会有可能导致程序的崩溃, 2019版本的VS对此进行了严格控制,编译器会报错(C2440) 编译器...
  • 01字符串的引用方式1、在C程序中,字符串是存放在字符...4、通过字符数组名或字符指针变量可以输出一个字符串,而一个数值型数组,是不能企图用数组名输出它的全部元素的。02字符指针作函数参数1、如果想把一个...
  • 字符指针数组

    2014-04-05 10:06:55
    对字符指针初始化赋值时可以将一个字符串赋值给它,但指针变量只是向该字符串的首元素的地址,如果要访问该字符串其它的字符,需要通过指针偏移来实现.若要打印整个字符串,printf("%s\n", a);会打印出字符指针...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 453
精华内容 181
关键字:

对字符指针变量赋值