*指针的基础学习*
来源:互联网 发布:上瘾网络剧韩国 编辑:程序博客网 时间:2024/06/05 23:54
计算机内存是由若干个1个字节的内存单元组成的存储器,计算机为了管理内存单元,给每个字节进行编号.编号就是地址.也就是指针而C语言函数调用都是值传递,在实参复制给形参的同时,实参并没有发生改变,所以才会有了传递地址就行修改主调函数实参的方法.(& 变量, * 指针变量).也正因如此,指针具有很高的灵活性,也可以说是星星的艺术.指针:如果指针存放某个基本数据类型变量的地址,那么该指针就指向这个基本数据类型变量的内容.我们就称之为一级指针.int a = 3;int *p = &a;1) 多个指针可以指向同一个变量2) 指针的指向是可以改变的.3) 指针定义的同时就好就初始化,空指针赋值为0或者NULL,表示谁都不指.未初始化的指针是垃圾值,容易导致系统崩溃.4) 指针在函数调用的时候可以有多个返回值.#include <stdio.h>void jiSuan(int num1, int num2, int *pjia, int *pjian, int *pcheng, double *pchu){*pjia = num1 + num2;*pjian = num1 - num2;*pcheng = num1 * num2;*pchu = num1 * 1.0 / num2;}int main(int argc, const char * argv[]) {int a = 10;int b = 3;int jia, jian, cheng;jia = jian = cheng = 0;double chu;jiSuan(a, b, &jia, &jian, &cheng, &chu);printf("%d-%d-%d-%.2f\n", jia, jian, cheng, chu);return 0;}5) 为什么指针在64位系统中都是8个字节.指针的大小根据处理器来决定的.64位系统的cpu每次处理64位,也就是8个字节.6) 为什么8个字节的指针要定义成不同类型,因为指针所指向的是变量的首地址,只有根据变量类型的长度才能完整的找到变量内容.7) 指针可以相减,比较大小,前提是2个指针必须指向同一个数组.p1>p2说明p1的地址高.相减为0表示指向同一个地址.但是不能相加,会溢出,产生垃圾值.8) const 在 * 的左边, 指针指向可以改变(P的值可改)指针所指向的内容不能改(*p不能改)const在 * 的右边,相反const 左右俩边都有,都不能改.字符数组 和 字符串 和 字符串指针:char cArr[] = {'H','E','L','L','O'};这种字符数组形式初始化 sizeof长度为5 数组元素中并没有\0类似其他基本类型的数组,数组元素是几个字节就是几个字节.int a[] = {1,2,3,4,5};printf("%ld\n", sizeof(a) / sizeof(int));char sArr[] = "hello";这种字符串形式初始化 sizeof长度为6,多一个\0字符.数组元素中有\0用strlen 计算长度都是5.说明只计算可见字符. 字符串形式不计算NULL字符字符串指针:字符串指针 本身是 一个指针变量,指向字符串的首地址.而字符串 本身是 依该地址为首存的一段连续的内存空间并以\0为止的集合,也可以理解为字符数组.char *p = "hello world";可以写为char *p; // 一般初始化的同时就赋值.p = "hello world";但是字符数组不能这样写char a[20];a = "hello world”; // a是字符数组地址常量,不能记进行赋值.二级指针:如果指针存储的是另一个指针变量的地址,那么这个指针就是二级指针.int a = 3;int *p = &a;int **pp = &p;或者int a = 3;int *p = &a;int *pp = p;指针与一维数组数组指针是指向数组中元素的指针变量.int a[3] = { 1, 3, 5};int *p = a; 或者 int *p1 = &a[0];数组首元素的地址就是数组的地址*(a+i) = *(p+i) = a[i];指针变量可以++,但是数组名不能++,只能+常量.指针++,指针内存的地址会改变,即指向改指针数组是数组里的元素是指针,或者说是地址的集合.Int *p1[10];因为[]的运算级比*高,所以p1先和[10]结合成为数组,p1是数组名,然后int *是类型,指的是存储10个int类型的指针变量.所以这个是指针数组.指针与二维数组上面一维指针数组的元素值可以通过*(a+i) = (p+i) = a[i]来得到,也就是可以用一个[]或者一个*来实现.那么就可以推理出 表示二维指针数组的元素值就可以通过2个*或者一个*加一个[]或者2个[]来表示.其余的方法只能得到数组元素的地址.
通过以上可以总结,二维数组指针可以用*(*(a+i)+j)来取值*(*(a+i)+j) = *(*(p+i)+j) = *(a[i]+j) = (*(a+i))[j] = a[i][j] = p[i][j]
0 0
- *指针的基础学习*
- 函数指针基础的学习记录
- c基础学习 - 指针
- C语言-指针的基础学习笔记(1)
- C语言-指针的基础学习笔记(2)
- C++基础学习笔记---指针
- C++基础学习笔记:指针
- 指针产生的基础
- 4.1、指针的基础
- C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
- 黑马程序员——C语言基础学习(四)---数组和指针的总结学习
- C语言基础:C语言指针(3) - 指针的指针
- C 指针的 基础 知识
- 指针基础应用的测试
- C++指针的基础介绍
- 对指针的基础理解
- VC基础学习:初学者指针指南
- 数据结构学习笔记之C指针基础
- 基于HT for Web的Web SCADA工控移动应用
- 测试驱动开发之初窥门径
- 精品物价网
- 欢迎使用CSDN-markdown编辑器
- 网络模型---(用于持续更新)
- *指针的基础学习*
- MAC Coordination Function
- Mongodb启动命令mongod参数说明
- POJ - 1816 Wild Words(字典树变题)
- 读取STM32F207/40x的CPU唯一ID(Unique Device ID)号方法
- 黑马程序员————OC面向对象编程基础总结
- abercrombie soldes france good condition some areas can plant corn. A household annual income of ab
- chaussures louboutin pas cher son angrily hiding Australia
- Thinking in Java之Set接口、HashSet源码学习