【课堂笔记】C语言基础与提高3
2018-01-31 20:05
323 查看
指针
1、定义与作用
指针是变量的一种,里面是地址,通过地址找到要找的数据。
单元的地址就是指针的内容;
2、指针运算符
&是取地址的运算符,*是表示指针运算符
例: int *p1, a;
p1= &a;
*p1 = 3;
&:取地址;
*:1.定义时表示的是指针变量。2.使用时表示取值。
例:利用指针运算实现strcpy
#include <stdio.h>
#include <stdlib.h>
char *mystrcpy(char *dest, char *src) \\dest为目的,src为源
{
char*tmp = dest;
if(dest == NULL || src == NULL)
{
returnNULL;
}
while ((*dest++= *src++) != ‘\0’); \\表达式为0时退出循环
return tmp;
}
int main()
{
char*str;
char*ptr;
str= (char *)malloc(sizeof(char) * 20); \\在堆中申请,需要释放内存
ptr= (char *)malloc(sizeof(char) * 20); \\为指针变量申请内存空间
printf(“Pleaseinput:\n”);
scanf(“%s%s”,str, ptr);
mystrcoy(str,ptr);
printf(“%s\n”,str);
}
3、指针作函数参数
函数的参数是一个指针,作用是将变量的地址传送到另一个函数中。
char* a(int *, int *)
区分:
函数指针:即指向这个函数的指针,定义为“数据类型 (*func)(参数列表);”()的优先级比*高,所以*func加括号,如”void (*func)(int *, int *);”
指针函数:即返回值是指针的函数,定义为”数据类型 *func(参数列表);”,如“char*func(int *, int *);“,即返回值为char *型。
指针与变量
注意:指针变量未赋值时,可以是任意值,是不能使用的,会造成意外错误。而指针变量给NULL值后,则是可以使用的,只是不指向具体的变量。
指针变量的使用步骤
1、 定义指针变量; char * p;
2、 给指针变量赋地址; p = (char *)malloc(sizeof(char)* 20);
3、 正常使用指针进行运算;
指针和数组
指针数组:每个元素都是指针
数组指针:指向数组地址的指针
数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。
int a[10]; //定义a为包含10个整型数据的数组
int *p; //定义p为指向整型变量的指针
p = &a[0]; //把a[0]元素的地址赋给指针变量p。也就是说,p指向a数组的第0号元素。
指向数组的指针变量也可以带下标。p[i]和*(p + i)等价
int a[5] = {1, 2, 3, 4, 5};
int *p1 = (int*)(&a + 1); \\&a数组的地址,&a+1表示下一个数组,无意义
int *p2 = (int*)((int)a + 1); \\
int *p3 = (int*)(a + 1); \\a数组首元素的地址,a+1表示第二个元素。
数组和字符串
用字符串指针指向一个字符串
main()
{
char*string[] = {“I love China!”, “I am”};
printf(“%s\n”,string);
}
char *s = “C Language”; 则表示s是一个指向字符串的指针变量,”C Language”为常量,不可修改。把字符串的首地址赋予s
字符数组和字符串的区别
1、 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以’\0’作为串的结束。
字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
2、 对字符串指针方式 char *ps = “C Language”;
可以写为:char *ps; ps = “C Language”;
而对数组方式:char st[] = {“C Language”};
不能写为:
char st[20]; st ={“C Language”};
而只能对字符数组的各元素逐个赋值。
指针与函数
int (*pf)(); //函数的返回值是整型
typedef unsigned char uchar; //声明一个新的数据类型
1、int *(*(*fp)(int))[10];
2、int*(*(*array[5]))())();
1:fp是一个指针,指向一个函数,函数有一个int类型的形参,函数的返回值是一个指针,指向一个有10个元素的数组,每个元素的类型都是int *
2:array是一个数组,有5个元素,每个元素的类型是一个指针,指针指向一个不带参数的函数,返回值是一个指针,指针指向一个函数,函数的类型是int *。
1、定义与作用
指针是变量的一种,里面是地址,通过地址找到要找的数据。
单元的地址就是指针的内容;
2、指针运算符
&是取地址的运算符,*是表示指针运算符
例: int *p1, a;
p1= &a;
*p1 = 3;
&:取地址;
*:1.定义时表示的是指针变量。2.使用时表示取值。
例:利用指针运算实现strcpy
#include <stdio.h>
#include <stdlib.h>
char *mystrcpy(char *dest, char *src) \\dest为目的,src为源
{
char*tmp = dest;
if(dest == NULL || src == NULL)
{
returnNULL;
}
while ((*dest++= *src++) != ‘\0’); \\表达式为0时退出循环
return tmp;
}
int main()
{
char*str;
char*ptr;
str= (char *)malloc(sizeof(char) * 20); \\在堆中申请,需要释放内存
ptr= (char *)malloc(sizeof(char) * 20); \\为指针变量申请内存空间
printf(“Pleaseinput:\n”);
scanf(“%s%s”,str, ptr);
mystrcoy(str,ptr);
printf(“%s\n”,str);
}
3、指针作函数参数
函数的参数是一个指针,作用是将变量的地址传送到另一个函数中。
char* a(int *, int *)
区分:
函数指针:即指向这个函数的指针,定义为“数据类型 (*func)(参数列表);”()的优先级比*高,所以*func加括号,如”void (*func)(int *, int *);”
指针函数:即返回值是指针的函数,定义为”数据类型 *func(参数列表);”,如“char*func(int *, int *);“,即返回值为char *型。
指针与变量
注意:指针变量未赋值时,可以是任意值,是不能使用的,会造成意外错误。而指针变量给NULL值后,则是可以使用的,只是不指向具体的变量。
指针变量的使用步骤
1、 定义指针变量; char * p;
2、 给指针变量赋地址; p = (char *)malloc(sizeof(char)* 20);
3、 正常使用指针进行运算;
指针和数组
指针数组:每个元素都是指针
数组指针:指向数组地址的指针
数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。
int a[10]; //定义a为包含10个整型数据的数组
int *p; //定义p为指向整型变量的指针
p = &a[0]; //把a[0]元素的地址赋给指针变量p。也就是说,p指向a数组的第0号元素。
指向数组的指针变量也可以带下标。p[i]和*(p + i)等价
int a[5] = {1, 2, 3, 4, 5};
int *p1 = (int*)(&a + 1); \\&a数组的地址,&a+1表示下一个数组,无意义
int *p2 = (int*)((int)a + 1); \\
int *p3 = (int*)(a + 1); \\a数组首元素的地址,a+1表示第二个元素。
数组和字符串
用字符串指针指向一个字符串
main()
{
char*string[] = {“I love China!”, “I am”};
printf(“%s\n”,string);
}
char *s = “C Language”; 则表示s是一个指向字符串的指针变量,”C Language”为常量,不可修改。把字符串的首地址赋予s
字符数组和字符串的区别
1、 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以’\0’作为串的结束。
字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
2、 对字符串指针方式 char *ps = “C Language”;
可以写为:char *ps; ps = “C Language”;
而对数组方式:char st[] = {“C Language”};
不能写为:
char st[20]; st ={“C Language”};
而只能对字符数组的各元素逐个赋值。
指针与函数
int (*pf)(); //函数的返回值是整型
typedef unsigned char uchar; //声明一个新的数据类型
1、int *(*(*fp)(int))[10];
2、int*(*(*array[5]))())();
1:fp是一个指针,指向一个函数,函数有一个int类型的形参,函数的返回值是一个指针,指向一个有10个元素的数组,每个元素的类型都是int *
2:array是一个数组,有5个元素,每个元素的类型是一个指针,指针指向一个不带参数的函数,返回值是一个指针,指针指向一个函数,函数的类型是int *。
相关文章推荐
- 【课堂笔记】C语言基础与提高1
- 【课堂笔记】C语言基础与提高2
- 170929 C++ 语言程序设计基础 课堂笔记
- C语言基础与提高1(一)
- lua学习笔记之-语言基础
- java语言基础,学习笔记
- 《PHP求职宝典》--PHP语言基础笔记2
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-03 联接查询
- javaSE语言基础学习笔记
- 奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记
- C#基础笔记——语言基础
- java自学资源(32期(包含视频及课堂笔记及课件))基础班+就业班
- C语言基础知识 - 笔记(一)
- [java学习笔记]java语言基础概述之转义字符&break&continue
- 汇编语言基础知识学习笔记(三)
- ios学习笔记 --(c语言基础4)
- php语言基础学习笔记
- go语言 新手学习笔记 go基础教程
- 【百度文库课程】Java语言基础与OOP入门学习笔记一
- Java笔记整理(2)Java语言基础