C语言_指针随笔
来源:互联网 发布:太原上知教育 编辑:程序博客网 时间:2024/05/17 06:48
指针:
- 指针就是地址,地址就是指针。
- 地址就是内存单元的编号。
- 指针变量是存放地址的变量(例:int* p,这里的p就是指针变量,用于存放地址)
指针和指针变量是两个不同的概念:平时也把指针变量间读为指针,也就是说下面示例代码中的p既是我们所说的指针,也是我们所说的指针变量。
例:
- 指针里面存放的是100:这句话中,指针就是地址
- 指针里面存放的是地址:这句话中,指针就是指针变量
为什么使用指针:
- 指针能直接访问硬件(OpenGL显卡绘图)
- 快速传递数据(指针表示地址:如change_numbers方法调用,调用方法change_numbers函数的时候传入值进去,无法改变main方法中变量的真实值,只有传入地址(也就是指针)才能真正改变main函数中的变量的值)
- 返回一个以上的值(返回一个数组或者结构体的指针)
- 表示复杂的数据结构
- 方便处理字符串
- 有点像面向对象
示例代码:
#include <stdio.h>
void pointertest();
void change_numbers(int a, int b);
void main()
{
int a = 100;
int b = 200;
change_numbers(a, b);//这里传的是int类型的变量值,操作的是change_numbers函数中卫形参开辟出来的地址,不能真实的改变main方法中的a,b的值。
printf("a = %d \nb = %d \n", a, b);
change_numbers2(&a, &b);//这样就是直接把a,b在main方法中开辟的地址传过去,是直接操作main函数中a,b所在的地址,能直接改变main函数中a,b的值。
int i = 10;
int* p; //指针的声明,这时候会开辟出一块内存,也就是一个地址,但是这块内存中没有存放东西(int*类型)
//C语言中没有String类型,可用指针返回一个字符串
char* h = "Hello World !";
printf("array : %s\n", h);
p = &i;//指针的初始化,为上面开辟出来的内存进行赋值,指向了i这个整数所在的地址
printf("*p = %d \n", *p);
*p = 100;//这里的p就是指针(int*类型)(其实它叫指针变量,只是平时我们 习惯性叫它指针),*p指的是p指向的地址中的值(int类型)
printf("更改*p的值!\n");
printf("*p = %d \n", *p);
printf("i = %d \n", i);
printf("修改i的值!\n");
i = 50;
printf("*p = %d \n", *p);
printf("i = %d \n", i);
}
void change_numbers(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void change_numbers2(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
运行结果:
- C语言_指针随笔
- 【随笔】C语言_基本概念
- C语言随笔(指针)
- C语言_指针
- C语言_指针
- C语言_指针
- C语言_指针
- C语言随笔_类型声明
- C语言学习一些指针随笔记
- C语言-指针_笔记
- C语言_高级指针
- C语言_指针函数
- C语言_函数指针
- C语言_函数指针数组指针
- C语言基础三_指针
- 黑马程序员—C语言_指针
- iOS C语言8_指针
- iOS C语言11_函数指针
- static的作用
- iOS开源项目周报0302
- 文件输入输出流的简单用法
- 嵌入式linux下使用qt virtualkeyboard
- RN单页面系统登录页导航器问题
- C语言_指针随笔
- 6.4、calculate member【计算成员】的实现原理
- 安装Cygwin不能找到下载镜像地址的解决办法
- 软件过程
- .bat文件中echo和@的用法
- H5项目常见问题及注意事项
- PKU 1200 Crazy Search (疯狂搜索)Hash表还差7题
- 原生态php抠出table表格数据,并转换成json格式
- 一篇很全面的freemarker教程