黑马程序员——C语言之指针常用方法小结
2014-11-30 18:58
344 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
概述:本小结着重讲解
1.什么是指针
2.使用指针来操作基础数据类型
3.使用指针来操作字符串
4.使用指针来操作字符串
5.使用指针来操作结构体
6.函数中的指针
1.什么是指针
我在看视频学习C的过程中,看到李明杰老师说,学习C语言,没学会指针,就相当于没学过C语言。这句话我很赞同,指针是C语言的一大特色,功能十分强大,一定好好好学会。
那么什么是指针呢?
按我的理解:一般变量在内存中声明后都有一个变量名来对应,使用该变量名即可查看修改该变量,但同时,也可以通过变量的地址来查看修改该变量,而指针就是用来保存该变量的地址的。
2.使用指针来操作基础数据类型
C语言的指针是用来指向各个变量的地址的,虽然C语言有多种数据类型,但这些类型的地址格式都是一致的,因此指向这些类型的指针都是四个字节大小(以win7 32位系统为例)。
如下是C语言的数据类型图:
基础数据类型的指针定义方法如下,其中 * 是得到地址对应的变量, & 是得到变量的地址:
char c = ‘a’;
char *pc = &c;
int a = 1;
int *pa = &a;
以此类推。。。
使用基础数据类型的指针方法如下:
char c = ‘a’;
char * pc = &c; //让指针指向同一基础类型的变量
*pc = ‘b’;
printf(“c=%c,*pc=%c\n”,c,*pc);
输出结果:c=b,*pc=b
使用注意:
1. 声明方式可以char * pc = &c;或者 char *pc; pc=&c;
但是不可以 char *pc; *pc=&c;
2. 同一种类型的指针只能指向相同类型的变量。
3. 不可以把地址直接赋值给指针变量:
char * pc;
pc = 1000; //错误写法,不能直接赋值地址。
3.使用指针来操作字符串
C语言中,没有String 类型,字符串可以有2种表示方式:
1. char * pname = “xiaohong”,
2. char name[] = “xiaohong”;
第一种方式就是采用指针方式来实现的,这2种方式有如下差别:
1. sizeof(pname)结果是 4,sizeof(name) 结果是9,因为对指针求sizeof()得到的只会是指针的字节数,永远都是4。而对数组用sizeof()则得到的数组的字节数。
2. 使用指针指向的字符串无法被修改值,只能读取,不能使用*(p+1)=’x’的方式修改值,会报错。
使用数组存储的字符串可以修改字符串的字符,如 name[1]=’x’。
4.使用指针来操作数组
定义一个数组并赋值:
int ages[] = {10,3,1,99,0,8}
可以使用指针指向这个数组:
int *page;
指向方之一:
page = ages; //指向数组名
指向方式二:
page = &ages[0]; //指向数组首个元素
通过指针操作数组元素:
读取: printf(“%d\n”,*(page+1));
修改: *(page+1)=99; printf(“%d\n”,*(page+1));
注意:使用指针指向数组中的不同元素时 *(p+1) 中加1 指的是向后移动一个元素的位置,而非指针地址移动一个字节!
5.使用指针来操作结构体
结构体如下:
struct student{
intid;
char*pname;
intscore;
};
可以直接定义结构体变量,也可以使用指针操作结构体
struct student std,*pstd;
pstd = &std; //指向结构体变量
变量操作结构体内容:
std.id = 1;
std.name = “xiaohong”;
std.score = 90;
指针操作结构体内容:
pstd->id = 2; //指针可以采用 -> 的形式访问成员变量
(*pstd).name = “xiaoming”; //指针也可以采用 . 的方式访问成员变量。
pstd->score = 60;
注意:指针指向结构体变量时,只能指向结构体变量的名字,不能指向结构体中的成员变量。
6.函数中的指针
指针在函数中的用途很广泛,其中最常用的就是解决了函数参数传递时基础类型参数是值传递的问题。
如:
#include<stdio.h>
int * chuanzhi(int i,int *j){
i= 100;
*j= 100;
}
void main(){
inti = 0;
intj = 0;
int* jj = NULL;
jj= chuanzhi(i,&j); //比较值传递和指针传递的不同。
printf("i=%d,j=%d,jj=%d\n",i,j,*jj);
}
输出结果:
以上的例子显示了值传递与地址传递的不同,同时显示了函数也能返回指针类型的值。
注意:
1.除了基本类型是值传递外,如果在函数中传递类似结构体、数组、字符串等变量的名字也是属于指针传递。
总结:如上列出的是平时使用较多的关于指针的知识,C语言中的指针博大精深,还有很多用法,例如指向函数的指针,指向指针的指针等等。好好学习C中的指针对于将来的学习大有裨益。
概述:本小结着重讲解
1.什么是指针
2.使用指针来操作基础数据类型
3.使用指针来操作字符串
4.使用指针来操作字符串
5.使用指针来操作结构体
6.函数中的指针
1.什么是指针
我在看视频学习C的过程中,看到李明杰老师说,学习C语言,没学会指针,就相当于没学过C语言。这句话我很赞同,指针是C语言的一大特色,功能十分强大,一定好好好学会。
那么什么是指针呢?
按我的理解:一般变量在内存中声明后都有一个变量名来对应,使用该变量名即可查看修改该变量,但同时,也可以通过变量的地址来查看修改该变量,而指针就是用来保存该变量的地址的。
2.使用指针来操作基础数据类型
C语言的指针是用来指向各个变量的地址的,虽然C语言有多种数据类型,但这些类型的地址格式都是一致的,因此指向这些类型的指针都是四个字节大小(以win7 32位系统为例)。
如下是C语言的数据类型图:
基础数据类型的指针定义方法如下,其中 * 是得到地址对应的变量, & 是得到变量的地址:
char c = ‘a’;
char *pc = &c;
int a = 1;
int *pa = &a;
以此类推。。。
使用基础数据类型的指针方法如下:
char c = ‘a’;
char * pc = &c; //让指针指向同一基础类型的变量
*pc = ‘b’;
printf(“c=%c,*pc=%c\n”,c,*pc);
输出结果:c=b,*pc=b
使用注意:
1. 声明方式可以char * pc = &c;或者 char *pc; pc=&c;
但是不可以 char *pc; *pc=&c;
2. 同一种类型的指针只能指向相同类型的变量。
3. 不可以把地址直接赋值给指针变量:
char * pc;
pc = 1000; //错误写法,不能直接赋值地址。
3.使用指针来操作字符串
C语言中,没有String 类型,字符串可以有2种表示方式:
1. char * pname = “xiaohong”,
2. char name[] = “xiaohong”;
第一种方式就是采用指针方式来实现的,这2种方式有如下差别:
1. sizeof(pname)结果是 4,sizeof(name) 结果是9,因为对指针求sizeof()得到的只会是指针的字节数,永远都是4。而对数组用sizeof()则得到的数组的字节数。
2. 使用指针指向的字符串无法被修改值,只能读取,不能使用*(p+1)=’x’的方式修改值,会报错。
使用数组存储的字符串可以修改字符串的字符,如 name[1]=’x’。
4.使用指针来操作数组
定义一个数组并赋值:
int ages[] = {10,3,1,99,0,8}
可以使用指针指向这个数组:
int *page;
指向方之一:
page = ages; //指向数组名
指向方式二:
page = &ages[0]; //指向数组首个元素
通过指针操作数组元素:
读取: printf(“%d\n”,*(page+1));
修改: *(page+1)=99; printf(“%d\n”,*(page+1));
注意:使用指针指向数组中的不同元素时 *(p+1) 中加1 指的是向后移动一个元素的位置,而非指针地址移动一个字节!
5.使用指针来操作结构体
结构体如下:
struct student{
intid;
char*pname;
intscore;
};
可以直接定义结构体变量,也可以使用指针操作结构体
struct student std,*pstd;
pstd = &std; //指向结构体变量
变量操作结构体内容:
std.id = 1;
std.name = “xiaohong”;
std.score = 90;
指针操作结构体内容:
pstd->id = 2; //指针可以采用 -> 的形式访问成员变量
(*pstd).name = “xiaoming”; //指针也可以采用 . 的方式访问成员变量。
pstd->score = 60;
注意:指针指向结构体变量时,只能指向结构体变量的名字,不能指向结构体中的成员变量。
6.函数中的指针
指针在函数中的用途很广泛,其中最常用的就是解决了函数参数传递时基础类型参数是值传递的问题。
如:
#include<stdio.h>
int * chuanzhi(int i,int *j){
i= 100;
*j= 100;
}
void main(){
inti = 0;
intj = 0;
int* jj = NULL;
jj= chuanzhi(i,&j); //比较值传递和指针传递的不同。
printf("i=%d,j=%d,jj=%d\n",i,j,*jj);
}
输出结果:
以上的例子显示了值传递与地址传递的不同,同时显示了函数也能返回指针类型的值。
注意:
1.除了基本类型是值传递外,如果在函数中传递类似结构体、数组、字符串等变量的名字也是属于指针传递。
总结:如上列出的是平时使用较多的关于指针的知识,C语言中的指针博大精深,还有很多用法,例如指向函数的指针,指向指针的指针等等。好好学习C中的指针对于将来的学习大有裨益。
相关文章推荐
- 黑马程序员——C语言指针使用小结
- 黑马程序员_反射中常用的方法笔记小结
- DataGrid使用小结(二)——常用函数方法
- c语言中函数二维数组传递方法小结
- CSS清除浮动常用方法小结
- String类常用方法小结
- C语言字符串几个常用函数小结
- C语言中的指针参数传递小结 (2005-7-5)
- C语言字符串几个常用函数小结
- ExtJs 备忘录(9)—— Ext常用属性、方法小结 [系列完]
- C语言实现类中方法 用函数指针在结构体中加入函数
- jQuery常用方法小结
- asp.net操作xml数据常用方法小结
- C语言指针一种容易错误使用的方法
- 【转帖】C语言的常用库函数使用方法分析及用途
- ExtJs 备忘录(9)—— Ext常用属性、方法小结 [系列完]
- DataGrid使用小结(二)——常用函数方法
- C语言常用的三种排序方法总结与探讨
- C语言常用函数的底层实现方法
- bgsound 背景音乐 的一些常用方法及特殊用法小结