指针知识点总结.doc
文本预览下载声明
指针12—24分:
指针与指针变量的概念、指针与地址运算符。
变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量,通过指针引用以上各类型数据。
用指针作函数参数。
返回指针值的指针函数。
指针数组指向指针的指针。
main函数的命令行参数。
知识归纳:
1.指针的概念。
指针:就是内存中的一个存储地址。
指针变量:是一个变量它存放的它所指向的变量。2.指针变量的定义。
类型 *指针变量名
类型说明中可取C语言的有效类型,* 表示为指针型变量。如:
char *c1,*c;
表示c1与c2是指针变量,其类型是字符型。注意:指针的类型与所指向的变量的类型要统一。(1),例:
int x; int *p=x; 或 int x?*p; p=x?;
(2)用间址运算(运算符为*)访问所指变量,例:
*p=5;//用作左值时代表所指的变量
x=*p+9;//.指针。
优先级是相同的,但从右向左结合。
:*a等同于a; *pa。
*p++等同于*(p++)
(4)(*p)++与*p++)。(*p)++是变量值增值,相当于a++;而*(p++)则是用完当前值后,指针值增值,即p++,是指向了新的地址。.指针与数组: (1)用数组名a,(2)取首元素的地址,即a[0]
(3)数组指针:指向数组的指针变量的简称,即指针变量是数组的首地址int a[10],*p;p=a;p,(p+1),(p+2),…,(p+9)a[0],a[1],a[2],…,a[9]。
*p,*(p+1),*(p+2),…,*(p+9) a[0],a[1],a[2],…,a[9]。…
方式二,指针名[下标],例如 p[0],p[1],…
方式三,*(指针名+下标),例如 *p,*(p+0),*(p+1),…
方式四,*(数组名+下标),例如 *a,*(a+0),*(a+1),…
(在C中,数组名就是第一个元素的地址,因此对数组的引用可以直接用*a表示a[0],用*(a+1)表示a[1],用*(a+2)表示a[2],…,用*(a+9)表示a[9]。#include stdio.h
void fun(int a,int b)
{ a++; b++; }
void main()
{
int x=3,y=4,z;
fun(x,y);
printf(%d,%d\n,x,y);
}
例2:传址调用(形参为指针,调用后形参值影响实参)
#include stdio.h
void fun(int *a,int *b)
{ (*a)++; (*b)++; }
void main()
{
int x=3,y=4,z;
fun(x,y);
printf(%d,%d\n,x,y);
}
例3 传址调用(形参为指针,可利用此类形参返回多个结果)
#include stdio.h
void fun(int a,int b, int *c,int* d)
{ *c=a+b; *d=a*b;}
void main()
{
int x=3,y=4,k,j;
fun(x,y,z,j);
printf(%d,%d\n,k,j);
}
例4 传址调用(形参为数组名)
#include stdio.h
void fun(int b[],int i)
{ b[i]=0; }
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9}, i;
fun(a,5);
for (i=0;i10;i++) printf(%d,a[i]);
}
7.指针与数组 char str[20];
str=Good luck!;
而对字符指针变量,可以采用下面方法赋值:
char *str;
str=Good luck!;
赋给str的不是字符,而是字符串第一个元素的地址。
(3)输入方式不同。
对字符数组可用如下方式赋值:
char str[20];
scanf(%s,str); //ok
但对字符指针变量则不建议用此方式,因为会发生指针的异常指向,正确做法为:
char *str,a[20];
str=a; //使指针有明确的指向
scanf(%s,str);
(4)字符指针变量的值是可以改变的,而字符数组名的值是不可以改变的。
例1:#include stdio.h
void main()
{
char *str=Good luck!;
puts(str);
str+=5; //ok
puts(str);
}
例2:
#include stdio.h
显示全部