您的位置:首页 > 编程语言 > C语言/C++

C语言 第十五天 与 本周总结

2016-08-11 19:41 274 查看
指针:

int *p = NULL;

类型 *标识符=NULL;

int c = 10;

int *p = &c;

*含义 取指针储存的地址上的值

*(&c)等价于c

指向指针的指针:

作用:

存储地址和取储存地址上的值

定义:

int a = 10;
int *p =&a; //把变量a的地址给指针p
int **pp=&p; //把指针p的地址给二级指针pp

注:
在定义指针之前需要定义一个变量然后把地址给指针

否则会无法通过编译

指针的运算:

<pre name="code" class="cpp">p = &a;<span> </span>//把变量a的地址给指针p
p = arr;<span> </span>//把数组arr的首地址给指针p
p = &arr[i];<span> </span>//把数组元素的地址给指针p
p1 = p2;<span style="white-space:pre">	</span>//把指针变量p2的值给p1<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
p++/++p;<span style="white-space:pre">	</span>//指向下一个整数
p--/--p;<span style="white-space:pre">	</span>//指向上一个整数
p+i;<span style="white-space:pre">		</span>//指向后面的第i个整数
p-i;<span style="white-space:pre">		</span>//指向前面的第i个整数<span style="white-space:pre">
</span>(*p)++<span style="white-space:pre">		</span>//把p的值加1
*(p++);<span style="white-space:pre">		</span>//取出下一个整数的值



比较两个指针的大小:
比较指针的地址

地址在前的指针小

地址在后的指针大

指针与数组;

一维数组:

指向数组元素的指针变量

定义:

int arr[10];
int *p;
p=&arr[0];

指针与数组之间的关系:
数值上:arr[i]=*(p+i)

地址上:&a[i]=p+i

总结:

a[i]=p[i]=*(p+i)=*(a+i)

二维数组:

行指针:a+i

列指针:a[i]+jint arr[3][4]={};
int *p=&a[0][0];
for(int i = 0;i<3;i++){
for(int j = j;j<4;j++){
printf("%d",*(p+i*4+j));
}
}指针在二维数组的取值方式

数组指针:

指向数组的指针

定义:

int a[2][4]={};
int (*p)[4];
p=a;
在二维数组中 *p与(*p)[]的区别:

(*p)[]指向的地址是二维数组的首元素

而*p指向的是二维数组第一行第一列

虽然指向的地址相同 

但是移动时是不同的

(*p)[]中的p+1是移动到下一行

而*p中的p+1只是移动到第一行的下一个

数组指针的取值:

a[i][j]=*(*(p+i)+j);

函数指针:

定义:

int (*p)(int a,int b)

数据类型 (*标识符)(参数列表)

int fun(){

return 0;

}

int (*p)();

p=fun;

p();

今日知识点:

字符串:

以字符数组的形式表示

相当于字符连成串

定义方式:

char str[20]={""};
char str[20]="";
char str[20]={'','','','','','\0'};
char 标识符[字符串长度]="";

指针与字符串:

int *p=str;

p="ASDF"; //此为正确

字符串的输入输出:

//用scanf合printf的方式
char str[100];
scanf("%s",str);
printf("%s",str);
//用gets和puts
char str[20];
gets(str); //在Linux环境下 gcc编译会把gets函数当作危险函数 需要用fgets(str,20,stdin)的方式
puts(str);
#include<string.h>

复制字符串的函数:

strcpy(str1,str2); //把str2的内容复制给str1 str1的数组长度不影响复制结果

把小写改大写:

strupr(str1); //Linux下无法使用此函数  原因是没有这个函数 需要自己定义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: