快捷搜索:  汽车  科技

c语言函数指针(C语言学习字符指针作为函数的参数)

c语言函数指针(C语言学习字符指针作为函数的参数)表示定义了一个字符数组str,在定义时为数组的前5个元素分别赋初值为'c'、'h'、'i'、'n'、'a',后面的5个元素赋初值为'\0'。若在函数内定义数组str,则字符串“china”被保存在动态存储区中。char str[10]={"china"};定义的是一个字符指针:char *pstr;2.初始化含义不同。例如:

c语言函数指针(C语言学习字符指针作为函数的参数)(1)

字符指针是指向字符型数据的指针变量。字符数组和字符指针都可用来存取字符串,但这两种方法在具体使用时有很多不同点,如下:

1.定义方法不同。例如:

定义的是一个字符数组:

char str[10];

定义的是一个字符指针:

char *pstr;

2.初始化含义不同。例如:

char str[10]={"china"};

表示定义了一个字符数组str,在定义时为数组的前5个元素分别赋初值为'c'、'h'、'i'、'n'、'a',后面的5个元素赋初值为'\0'。若在函数内定义数组str,则字符串“china”被保存在动态存储区中。

若将数组str定义为静态(static)数组或者在函数外定义数组str,则字符串“china”被保存在静态存储区中,数组名str则代表字符串“china”在内存中存放的首地址。

char *pstr="china";

表示定义了一个字符指针pstr,并在定义时用保存在常量存储区中的字符串“china”在内存中的首地址为指针变量pstr赋初值。这里不能理解为将字符串赋值给pstr,pstr是指针变量,只能将字符串常量“china”的首地址值赋值给它。

3.赋值方法和含义不同。例如:

指针变量可用如下方式赋值:

char *pstr;

pstr="china";//正确

这里是把保存在常量存储区中的字符串“china”的首地址赋值给pstr,而对字符数组不能按如下方式对其进行整体赋值:

char str[10];

str="china";//错误

因为C语言中的数组名代表数组元素的起始地址,它是一个地址常量,不能在程序中改变它的值。将一个字符串赋值给字符数组可以这样 例如:strcpy(str "china");

4.输入字符串时略有不同。

在用scanf()函数输入字符串到数组中。例如:

char str[10];

scanf("%d" str);//正确

而下面的语句:

char *pstr;

scanf("%s" pstr);//错误,使用了未初始化的指针变量pstr

是错误的,因为指针变量pstr尚未指向一个明确的存储单元,就把输入的字符串存入其中,将导致非法内存访问错误。

5.字符数组的数组名是一个地址常量,其值不能改变,而字符指针是一个变量,它的值是可以改变的,改变字符指针的值就是改变字符指针的指向。虽然字符指针变量的值是可以改变的,但不等于字符指针指向的内容可以改变。例如:

数组名str指向字符串“china”的首地址,可以通过*(str i)来引用字符串中的第i 1个字符,即下标为i的元素str[i] 但不能试图通过str 操作使str指向字符串中的某个字符。

如果字符指针pstr指向了字符串“china”的首地址,则可以通过*(pstr i)来引用字符串中的第i 1个字符,也可通过pstr 操作(即移动指针pstr)来使pstr指向字符串中的某个字符。例如:

for(pstr=str;*pstr!='\0';pstr )

{

printf("%c" *pstr);

}

其作用为:依次输出字符指针pstr所指向的字符串(假设已存于字符数组str中)中的每个字符。

但是,当字符指针pstr指向的字符串“china”存储在常量存储区中,因为常量存储区是只读的,所以此时不能修改字符指针指向的存储单元中的内容。例如,下面错误的语句:

char *pstr="china";

scanf("%s" pstr);//非法内存访问错误,不能修改指针变量pstr指向的字符串常量

但是,如果修改了字符指针的指向,使其指向一个字符数组,就可以修改字符指针指向的内存单元中的字符了。例如:

static char str[10];

char *pstr=str;

scanf("%s" ptr);

编程小提示:正确使用字符数组和字符指针访问字符串的两个基本原则是,必须明确字符串被保存在哪里,字符指针指向哪里。

由于数组作为函数形参与指针变量作函数形参的等价性,因此在用数组作为函数形参的函数体内部,可以对声明为形参数组的数组名进行和指针变量一样的自增、自减运算,除此之外,对数组名都不能进行自增、自减运算。

猜您喜欢: