C语言——什么是指针?
去年学C语言课时,初步了解了指针的概念,能看懂一些简单的含有指针的程序,但事实上对于指针并没有真正的弄明白它的使用,这点我在半年后的数据结构课程上才深刻的体会到和别人的差距。更加可怕的是,对于当时所得的一知半解,现在已经忘的八九不离十了,所以决定进行C语言核心部分的重修,巩固自己的基础。
1.什么是指针?
定义一个变量,系统会为它分配内存单元,内存区的每一个字节有一个编号,即“地址”。
我们可以通过地址找到所需的变量单元,即:地址指向该变量单元。而这个地址便被形象化的称为“指针”。即:一个变量的地址称为该变量的指针。
2.什么是指针变量?
定义一个变量,专门用它来存放另一个变量的地址,这个变量被称为指针变量。指针变量的值是地址(指针)。
3.指针变量的定义。
int *p;//类型名 * 指针变量名;
***注意:指针变量p前面的*,指针运算符,表示的是“指向”,表示该变量的类型为指针型变量。在定义指针变量时必须指定基类型。
int a,b;
int *p1,*p2;//定义两个指向int的指针变量p1,p2
p1=&a;//a的地址赋给指针变量p1
p2=&b;//b的地址赋给指针变量p2
***注意:&,取地址运算符,&a是变量a的地址。
4.指针变量的引用。
*p1=;//将100赋给p指向的变量,即变量a=100
printf("%d",*p1);//输出a的值
printf("%o",p1);//输出a的地址
***注意:*p1指,指针变量p1指向的变量,即整型变量a。
5.指针的使用。
例1:输入a和b两个整数,按先后大小的顺序输出a和b的值。
#include <stdio.h>
int main()
{
int *p1,*p2,*p,a,b;
printf("请输入两个整数:");
scanf("%d,%d",&a,&b);//输入数字时一定要使用英文状态下的逗号,
p1=&a;
p2=&b;
if(a<b)
{
p=p1;
p1=p2;
p2=p;
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
return ;
}
例2:swap()函数实现交换两个变量的值。
int main()
{
void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
printf("please enter a and b:");
scanf("%d,%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
swap(pointer_1,pointer_2);//swap(a,b)是错误的
printf("a=%d,b=%d\n",a,b);
return ;
}
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;//传a值
*p1=*p2;//传b值
*p2=temp;
}
swap函数的两个形参p1和p2是指针变量,实参pointer_1和pointer_2也是指针变量,调用函数时,进行的是“值传递”。这个时候p1和pointer_1都指向a,p2和pointer_2都指向b,swap函数中,*p1和*p2的值互换,也就使a和b的值互换了。
***注意:C语言中实参变量和形参变量之间的数据传递是单向的“值传递”的方式。不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指变量的值。
例3:输入3个整数a,b,c,要求按从大到小的顺序将它们输出,并用函数实现。
#include <stdio.h>
int main()
{
void exchange(int *q1,int *q2,int *q3);
int a,b,c,*p1,*p2,*p3;
printf("please enter three numbers:");
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
exchange(p1,p2,p3);
printf("The order is:%d,%d,%d\n",a,b,c);
return ;
}
void exchange(int *q1,int *q2,int *q3)
{
void swap(int *pt1,int *pt2);
if(*q1<*q2) swap(q1,q2);
if(*q1<*q3) swap(q1,q3);
if(*q2<*q3) swap(q2,q3);
}
void swap(int *pt1,int *pt2)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
函数的嵌套调用思维需要好好的积累和练习。
上述是指针的基本概念和简单应用,指针有很多灵活的使用,其中就包括指针和数组结合,指针和字符串结合的广泛使用。
C语言——什么是指针?的更多相关文章
- Swift3.0语言教程使用指针创建和初始化字符串
Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...
- C语言中的指针数组
C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
- GO语言中的指针
http://www.tizgrape.com/?p=100 Go语言中的指针语法和C++一脉相承,都是用*作为符号,虽然语法上接近,但是实际差异不小. Go使用var定义变量: var v6 *in ...
- 由链表初始化看C语言的二级指针
先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...
- C语言 > 数组和指针
C语言 数组和指针 const: 关于指针和const需要注意一些规则.首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的. 然而,只能把非const数据的地 ...
- C语言结构体指针的引用问题
在写栈的一个应用时遇见这样的一个问题 SqStack s; s->base = (int*)malloc(sizeof(int)*10); 通过这样一个代码引用的时候,会导致程序出现异常 经过一 ...
- Go语言基础之指针
区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 Go语言中的函数传参都是值拷贝 ...
- c语言之函数指针应用
c语言之函数指针应用 1.函数指针与指针函数 在开始运用函数指针前,我们需要将两个概念即:函数指针与指针函数搞清楚. 函数指针,指明这个一个函数,但返回值为指针类型,语法格式为: 类型名* 函数名A( ...
- C语言中的指针笔记
C语言指针 得到变量的地址 可以使用&运算符找到变量保存在内存中的位置 int x = 1; printf("x的内存地址是"%p\n",&x) %p格式 ...
随机推荐
- golang单点推送
package main import ( "encoding/json" "flag" "fmt" "log" &qu ...
- objc_setAssociatedObject获取cell上button对应所在的行
#import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property (weak, nonatomic) IBOu ...
- Linux通信之异步通知模式
[参考]韦东山 教学笔记 为了使设备支持异步通知机制,驱动程序中涉及以下3项工作:1. 支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID. 不过此项工 ...
- js 事件冒泡、事件捕获、stopPropagation、preventDefault
转自:http://www.jb51.net/article/42492.htm (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: ...
- Deutsch lernen (13)
1. die Sicherheit, -en 安全(性) Was ist Ihnen wichtiger: Freiheit oder Sicherheit? Wie ist es mit der ...
- Jsp页面中常用的EL表达式
首先引入标签 <%@ page language="java" contentType="text/html; charset=utf-8" pageE ...
- spring boot注解
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...
- SSM项目中表单分页操作(PageHepler使用)
Maven pom.xml添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifa ...
- wafII笔记
wafII笔记: 组件的使用方法: 组件属性: 属性的设置和获取通过option方法来完成 waf("#id").wafProm ...
- ik分词器各版本下载地址
ik分词器各个版本下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases