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
比较两个指针的大小:
比较指针的地址
地址在前的指针小
地址在后的指针大
指针与数组;
一维数组:
指向数组元素的指针变量
定义:
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下无法使用此函数 原因是没有这个函数 需要自己定义
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下无法使用此函数 原因是没有这个函数 需要自己定义
相关文章推荐
- C语言之精华总结!
- C语言学习总结 一 关于变量类型
- c语言中static 用法总结
- C语言中各种数据类型长度的总结
- [总结]前期总结和本周安排(2008-12-08)
- C语言之精华总结!(转自互联网)
- 第十五天,我没有写当日总结
- c语言中的static和extern关键字总结
- C语言中各种数据类型长度的总结(转)
- 有关C语言指针学习思想的随笔常用形式的总结(原创)
- 本周总结
- [转]C语言之精华总结!
- C语言输入输出总结
- C语言的一些细节总结
- C语言变量总结
- C语言中的多线程编程--Unix学习总结之五
- C语言的排序算法总结
- C语言宏定义总结
- c语言中static 用法总结
- C语言——extern声明的总结