笔记目录
第八章 指针
指针的含义
指针指内存地址,通过内存地址找到变量所在的单元。
// 2020/11/14
// C
#include <stdio.h>
int main() {
int a = 10;
printf("%d\n", a);
printf("%d\n", &a);
return 0;
}

直接访问变量和间接访问变量
直接访问
直接从某个变量的地址空间中访问该内存空间所对应的值。
间接访问
某个变量i的地址存放到另一个变量j中,通过访问变量j得到变量i的地址,从而访问变量i的值。

指针变量
整形变量、浮点型变量、字符型变量、数组、指针变量
简单(基本)变量
整形、浮点、字符
引用变量
指针、数组
指针变量:如果有一个变量是用来专门存放地址的或存放另一个变量地址的变量。(所有的指针变量用来存放地址)。
指针变量的定义格式
*类型名称 指针变量的名称
例如:
int *pointer;//int:类型,表示这个指针变量指向一个int类型的值。 *:表示变量p是一个指针变量。p:表示变量中存放地址。*p:表示该存放的地址指向的值。
注意:在定义指针变量时,必须指定指针变量的类型,而且一个指针变量,只能指向同类型的变量。不能一会指向整形变量,一会指向浮点型变量。
在第一次使用指针变量时,必须给指针变量赋初值。
// 2020/11/14
// C
#include <stdio.h>
int main() {
int a = 10;
int *p; //定义指针变量
p = &a; //将a的地址赋给p
printf("%d\n", *p); //输出指针p指向变量的值
printf("%d\n", p); //输出指针p指向变量a的地址
return 0;
}

// 2020/11/14
// C
#include <stdio.h>
int main() {
int a = 10;
// int *p; //定义指针变量。1.定义
// p = &a; //将a的地址赋给p。2.赋初值
int *p = &a;
*p = 99;//重新给指针变量p赋值,将会覆盖整形变量a的值
printf("%d\n", *p); //输出指针p指向变量的值
printf("%d\n", p); //输出指针p指向变量a的地址
printf("%d\n", a);
return 0;
}

例如
两个整数a,b,按照由大到小的顺序输出
// 2020/11/14
// C
#include <stdio.h>
int main() {
//两个整数a,b,按照由大到小的顺序输出
int a = 10, b = 20;
int *p1, *p2;
p1 = &a;
p2 = &b;
int *p;
if (a < b) {
p = p1;
p1 = p2;
p2 = p;
}
printf("%d,%d\n", a, b);
printf("%d,%d\n", *p1, *p2);
return 0;
}

// 2020/11/14
// C
#include <stdio.h>
int main() {
//两个整数a,b,按照由大到小的顺序输出
int a = 10, b = 20, c;
int *p1, *p2;
p1 = &a;
p2 = &b;
int *p = &c;
if (a < b) {
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
printf("%d,%d\n", a, b);
printf("%d,%d\n", *p1, *p2);
return 0;
}

例题

指针变量作为函数的参数
当函数的形参为指针类型时,在函数发生调用的时候,实参将变量 地址 传递给形参。
例题
// 2020/11/14
// C
#include <stdio.h>
int main() {
//两个整数a,b,按照由大到小的顺序输出
void swap(int *, int *);
int x = 10, y = 100;
int *a = &x, *b = &y;
if (x < y)
swap(a, b);
printf("%d,%d\n", *a, *b);
printf("%d,%d\n", x, y);
return 0;
}
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}

// 2020/11/14
// C
#include <stdio.h>
int main() {
//两个整数a,b,按照由大到小的顺序输出
void swap(int *, int *);
int x = 10, y = 100;
int *a = &x, *b = &y;
if (x < y)
swap(a, b);
printf("%d,%d\n", *a, *b);
printf("%d,%d\n", x, y);
return 0;
}
void swap(int *a, int *b) {
int *p;
p = a;
a = b;
b = p;
}

*a=*&a
在函数形参的声明和定义时,定义为数组也表示地址,比如:声明(void swap(int a[],int b[]);)定义(void swap(int a[],int b[]){})等同于void swap(int *a,int *b);
例题

函数返回值的方式
通过return方式返回值
// 2020/11/14
// C
//函数的返回值
#include <stdio.h>
int main() {
int add1(int, int);
int x = 3, y = 9;
int sum = add1(x, y);
printf("%d\n", sum);
return 0;
}
int add1(int a, int b) {
int sum;
sum = a + b;
return sum;
}
通过指针或者数组方式“返回”值
// 2020/11/14
// C
//函数的返回值
#include <stdio.h>
int main() {
void add1(int, int, int *);
int x = 3, y = 9;
int<

本章详细讲解了C语言中的指针概念,包括指针的含义、直接访问和间接访问变量、指针变量的定义和使用、指针作为函数参数、通过指针引用数组和字符串、二维数组的地址以及指向函数的指针。内容涵盖各种实例和例题,帮助读者深入理解指针操作。

3666

被折叠的 条评论
为什么被折叠?



