介绍C语言指针
变量都有一个声明和赋值的过程。
- 声明(申请一块内存区域保存数据)。
- 赋值(内存中填入具体的数据)。
指针类型变量 存储的数据是一个(存储变量的地址)。
- 每个指针都对应着一个数据类型。
- 使用 *(间接访问操作符)可以获得指针变量存储地址里的数据。
- 使用 &(取地址符)可以获得变量的地址,赋值给指针类型变量。
总结:指针与变量的区别:指针变量存放的是某一类型变量在内存中的虚拟地址,普通变量存储的是某一类型数据。
介绍:如下图 1 可以得到这样的结论,指针变量和普通变量基本相同。
#include <stdio.h>
#include <stdlib.h>
int main(){
char *p;
char a = 'H';
p = &a;
return ;
}
指针变量

引用:引用是一个变量的别名,对引用的操作与对变量直接操作完全一样。C++中的概念 C语言中没有。
引用和指针的区别
- 引用被创建时必须被初始化。而指针则可以在任何时候被初始化。
- 引用初始化后不可以被改变,而指针则可以改变。
- 指针可以进行算数运算,引用不可以。
- 指针可以有多级,但是引用只能是一级。
函数调用参数传递的形式
引用传递是C++才有的特性,C语言只支持值传递。所以C语言只能通过传指针来达到在函数内修改函数外变量的功能。也就是swap(int &a,int &b)在C语言中是错的,swap(int *a,int *b)是对的。
部分指针悬挂情况
指针指向非法的内存地址,那么这个指针就是悬挂指针,也叫野指针。
初始化不正确
//把352赋值给p3,一是类型不匹配,再者如果真的赋值成功(用强制转换)那么p3指向的地址是352,这个地址不一定是可用的。
int* p = ; //这段代码编译没错,向p3指向的地址中放入352这个数,但是p3的值没有初始化,它指向的地址不确定,所以p3现在是野指针,运行时也可能程序崩溃。
int *p;
*p = ;
函数返回局部变量
//指针指向某个对象之后,当这个对象的生命周期已经结束,对象已经消亡后,仍使用指针访问该对象,将出现运行时错误。
int* retAddr(){
int num=;
return #
}
多次清空,访问清空数据等
//多次清空
x = malloc(N * sizeof(int));
free(x);
y = malloc(M * sizeof(int));
free(x); //非法访问
x = malloc(N * sizeof(int));
free(x);
y = malloc(M * sizeof(int));
for (i = ; i < M; i++)
y[i] = x[i]++;
介绍C语言指针的更多相关文章
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- C程序设计语言--指针和引用的区别
在看了一篇文章以后,http://coolshell.cn/articles/7992.html,说的是C和C++之间的缺陷,当然这篇文章说的非常高深了.所以就找了一些资料,分析了这两者的区别 在&l ...
- Go 语言指针
Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址. Go 语言 ...
- C语言指针基本操作
C语言指针基本操作 指针 指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...
- C语言指针的高级操作
C语言指针的高级操作 指针 指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...
- C语言指针【转】
一.C语言指针的概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细 ...
- 2-Linux C语言指针与内存-学习笔记
Linux C语言指针与内存 前面我们对于: c语言的基本用法 makeFile文件的使用 main函数的详解 标准输入输出流以及错误流管道 工具与原理 指针与内存都是c语言中的要点与难点 指针 数组 ...
- GO语言学习(十五)Go 语言指针
Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...
随机推荐
- php替换文件指定行的内容
//第一种 利用file 函数 读取文件,每一行都是一个数组元素 $arr = file($file); $arr[$line] = "hello"; file_put_conte ...
- 关于vue-axios的url地址统一设置
var instance = axios.create({ baseURL: 'http://qqk.com/Wechat/', headers: { 'Content-Type': 'applica ...
- Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一.AsyncTask的使用 AsyncTask是一种轻 ...
- 在Visual Studio 2012中使用GSL
1. 下载GSL http://gnuwin32.sourceforge.net/packages/gsl.htm 下载 Complete package, except sources和Source ...
- C语言 字符串前加L的意义 如:L“A”
转自:http://c.biancheng.net/cpp/html/1069.html Unicode或者宽字符都没有改变char数据型态在C中的含义.char继续表示1个字节的储存空间,sizeo ...
- Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)
一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...
- maven工程 java 实现文件上传 SSM ajax异步请求上传
java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...
- Xampp相关命令
http://www.upwqy.com/details/5.html 1 启动关闭 需要切换目录: # cd /opt/lampp/ 启动 XAMPP # ./lampp start 停止 XAMP ...
- C++中 Rand随机序列函数
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void): 从srand (seed ...
- gnuplot画图中文标注相关问题
gnuplot是一个基于命令行的开源跨平台画图工具包,画图功能非常丰富.不过最近在考虑如何在gnuplot图中添加中文标注的过程中遇到了一些问题,记录如下. gnuplot支持多种的输出格式,比如pn ...