黑马程序员——C语言基础——指针2
2015-02-28 23:34
239 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
在C语言中,字符串是存放在字符数组中的,想引用一个字符串,可以使用以下两种方法。
1. 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格式声明”%s”输出该字符串。
例如,定义一个字符数组,在其中存放字符串“I love China !”,输出该字符串和第8个字母
2. 用字符指针变量指向一个字符串常量,通过字符指针引用字符串常量。
例如,
注意:通过字符数组名或字符指针变量可以输出一个字符串,但对一个数值型数组,是不能企图用数组名输出它的全部元素的。
例如,用函数调用实现字符串的复制
使用字符指针变量和字符数组的比较
1、字符数组由若干元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,绝不是将字符串放到字符指针变量中。
2、赋值方式:可以对字符指针变量赋值,但不能对数组名赋值。
3、初始化的含义。对字符指针变量赋初值:
char*a="abc"; //定义字符指针,并把字符串的首地址赋给a。
charb[]="abc"; //定义字符数组,并把字符串赋给数组中各元素。
4、存储单元的内容。编译时:为字符数组分配若干存储单元,以存放各元素的值。而对字符指针变量,只分配一个存储单元。
5、指针变量的值可以改变,而数组名代表一个固定的值,不能改变。
例如,改变指针变量的值
6、字符数组中各个元素的值可改变,但字符指针变量指向的字符串常量中的内容是不可被取代的。
7、char *format="a=%d,b=%d\n";printf(format,a,b);字符指针变量允许存放一句printf函数中的表达式。
3. 指向函数的指针
什么是函数指针
如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址成为这个函数的指针。可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如:
用函数指针变量调用函数,例如
怎样定义和使用指向函数的中指针变量
定义指向函数的指针变量的一般形式:
类型名 (*指针变量名)(函数参数列表);
注意:函数指针不能进行算术运算!p+1,p-n是无意义的。
2、指向意味着通过对象的地址。
3、一维数组名arr代表首元素地址,*p=arr;数组给指针p赋值首元素地址。
4、关于指针的归纳比较:
变量定义 类型表示 含义
int I int 定义整型变量i
int *p int * 定义p为指向整型数据的指针变量
int a[5] int [5] 定义有5个元素的整型数组
int *p[4] int*[4] 定义指针数组,由4个指向整型数据的指针元素组成
int (*p)[4] int(*)[4] p为指向包含4个元素的一维数组的指针变量
int fun() int () 返回int函数值的函数fun
int *p() int*() p为返回一个(指向整型数据的)指针的函数
int (*p)() int (*)() p为指向(返回整型数据的)函数的指针
int **p int ** p是一个指向整型数据的指针变量的指针变量
void *p void * p是一个指针变量,基类型为void,即p是一个不指向具体对象的指针变量
5、指针运算,明白以下含义:p++、p--、p+i、p-i、p=&a、p=arr、p=&arr[i]、p=fun、p1=p2。
6、指针变量可以有空值,p=NULL(在stdio.h头文件中#define NULL 0),它使p指向地址为0的单元。
注意:指针使用实在太灵活,对熟练的程序员可以编出高质、高效的代码,但对初学者要慎用,比如:未对p赋值的情况下,就向*p赋值会破坏其它单元内容。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
-------
1.通过指针引用字符串
字符串的引用方式在C语言中,字符串是存放在字符数组中的,想引用一个字符串,可以使用以下两种方法。
1. 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格式声明”%s”输出该字符串。
例如,定义一个字符数组,在其中存放字符串“I love China !”,输出该字符串和第8个字母
#include <stdio.h> int main () { char string []=”I love China !”; printf(“%s”,string); printf(“%s\n”,string [7]); return 0 ; }
2. 用字符指针变量指向一个字符串常量,通过字符指针引用字符串常量。
例如,
#include <stdio.h> Int main () { char *string []=”I love China !”; printf(“%s”,string); return 0 ; }
注意:通过字符数组名或字符指针变量可以输出一个字符串,但对一个数值型数组,是不能企图用数组名输出它的全部元素的。
2. 字符指针作函数参数
如果想把一个字符串从一个函数传递到另一个函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量做参数。在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。例如,用函数调用实现字符串的复制
#include <stdio.h> int main() { void copy_string(char from[],char to[]); char a[]="I am a student."; char b[]="You are a teacher."; char *from,*to; printf("String a is %s\nString b is %s\n",a,b); printf("Now copy a to b...\n"); copy_string(from,to); printf("String a is %s\nString b is %s\n",a,b); return 0; } void copy_string(char from[],char to[]) { int i=0; while(from[i]!='\0') { to[i]=from[i];i++; } to[i]='\0'; }
使用字符指针变量和字符数组的比较
1、字符数组由若干元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,绝不是将字符串放到字符指针变量中。
2、赋值方式:可以对字符指针变量赋值,但不能对数组名赋值。
3、初始化的含义。对字符指针变量赋初值:
char*a="abc"; //定义字符指针,并把字符串的首地址赋给a。
charb[]="abc"; //定义字符数组,并把字符串赋给数组中各元素。
4、存储单元的内容。编译时:为字符数组分配若干存储单元,以存放各元素的值。而对字符指针变量,只分配一个存储单元。
5、指针变量的值可以改变,而数组名代表一个固定的值,不能改变。
例如,改变指针变量的值
#include <stdio.h> Int main () { char *a =”abc”; a=a+7; printf(“%s\n”,a); return 0 ; }
6、字符数组中各个元素的值可改变,但字符指针变量指向的字符串常量中的内容是不可被取代的。
7、char *format="a=%d,b=%d\n";printf(format,a,b);字符指针变量允许存放一句printf函数中的表达式。
3. 指向函数的指针
什么是函数指针
如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址成为这个函数的指针。可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如:
int (*p) (int ,int );
用函数指针变量调用函数,例如
#include <stdio.h> int main() { int max(int,int); //函数声明 int (*p)(int,int); //定义函数指针变量 int a,b,c; p=max; //指针指向max入口地址 c=(*p)(a,b); //通过指针变量调用max函数 printf(“max is %d”, c); return 0; } int max(int x,int y) //定义max函数 { return x>y?x:y ; }
怎样定义和使用指向函数的中指针变量
定义指向函数的指针变量的一般形式:
类型名 (*指针变量名)(函数参数列表);
注意:函数指针不能进行算术运算!p+1,p-n是无意义的。
4.有关指针的小结
1、指针就是地址,但指针&指针变量不同。2、指向意味着通过对象的地址。
3、一维数组名arr代表首元素地址,*p=arr;数组给指针p赋值首元素地址。
4、关于指针的归纳比较:
变量定义 类型表示 含义
int I int 定义整型变量i
int *p int * 定义p为指向整型数据的指针变量
int a[5] int [5] 定义有5个元素的整型数组
int *p[4] int*[4] 定义指针数组,由4个指向整型数据的指针元素组成
int (*p)[4] int(*)[4] p为指向包含4个元素的一维数组的指针变量
int fun() int () 返回int函数值的函数fun
int *p() int*() p为返回一个(指向整型数据的)指针的函数
int (*p)() int (*)() p为指向(返回整型数据的)函数的指针
int **p int ** p是一个指向整型数据的指针变量的指针变量
void *p void * p是一个指针变量,基类型为void,即p是一个不指向具体对象的指针变量
5、指针运算,明白以下含义:p++、p--、p+i、p-i、p=&a、p=arr、p=&arr[i]、p=fun、p1=p2。
6、指针变量可以有空值,p=NULL(在stdio.h头文件中#define NULL 0),它使p指向地址为0的单元。
注意:指针使用实在太灵活,对熟练的程序员可以编出高质、高效的代码,但对初学者要慎用,比如:未对p赋值的情况下,就向*p赋值会破坏其它单元内容。
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
相关文章推荐
- 黑马程序员——C语言基础——指针
- 黑马程序员——c语言基础:指针
- 黑马程序员---c语言基础---数组、指针
- 黑马程序员——C语言基础---指针4
- 黑马程序员——C语言基础---指针3
- 黑马程序员 _4 C语言基础 数组,指针,字符串
- 黑马程序员——C语言基础---指针2
- 黑马程序员-----------C语言基础-----------指针(二)
- 黑马程序员——C语言基础(六)指针
- 黑马程序员-C语言基础九:指针
- 黑马程序员——C语言基础——指针编程练习题
- 黑马程序员--C语言基础--指针
- 黑马程序员_iOS开发C语言基础之指针
- 黑马程序员--C语言基础之--数组、指针的基础知识
- 黑马程序员——C语言基础学习(四)---数组和指针的总结学习
- 黑马程序员——C语言基础---指针
- 黑马程序员——C语言基础---又见指针
- 黑马程序员——C语言基础---指针
- 黑马程序员-iOS基础-C语言基础(五)指针
- 黑马程序员-----------C语言基础-----------指针(一)