用字符串常量初始化指针和数组

来源:互联网 发布:数据库如何进行注释 编辑:程序博客网 时间:2024/05/16 03:27

本文选自:c专家编程.P87.

定义指针时,编译器并不为指针所指的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量进行初始化。例如,下面的定义创建一个字符串常量(为其分配内存):

char *p = “breadfruit”;

注意只有对字符串常量才是如此。不能指望为浮点数之类的变量分配空间,如:

float *pip = 3.14;     /*错误,无法通过编译*/

ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串值,程序会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。

 

数组也可以用字符串常量进行初始化:

char a[] = “gooseberry”;

与指针相反,由字符串常量初始化的数组是可以修改的。比如下面的语句:

strncpy( a, “black”, 5 );

将数组的值修改为“blackberry”。

 

#include<stdio.h>

#include<string.h>

 

int main(void)

{

    char *p = "this is a example";

         //char *pi = 3.14; //这样定义是错误的,无法通过编译

         //p[0] = 'T'; //修改该字符串常量时,编译是没问题,但是运行时会出现异常

 

         char a[] = "gooseberry";

    strncpy( a, "black", 5 );

 

         printf("%s/n", p );

         printf("%s/n", a );

 

         return 0;

}

原创粉丝点击