指针的代码

// Code file created by C Code Develop

#include "ccd.h"
#include "stdio.h"
#include "stdlib.h"
// #include "waibu.c"
#include "string.h" int main(int argc, char **argv)
{
int i = 10;
char c1 = 'A';
double d = 100.56; // 一、变量的地址
// 输出内存地址的格式控制符是 %p 地址采用十六进制的数字显示
printf("变量i的地址是:%p\n", &i);
printf("变量c1的地址是:%p\n", &c1);
printf("变量d的地址是:%p\n", &d); //二、指针
int *ip; // 一个整形的指针
char *cp; // 一个字符型的指针
double *dp; //三、对指针赋值
// 用整数型指针存放整数型变量的地址
//用字符型指针存放字符型变量的地址
//用双精度型指针存放双精度型变量的地址
//自定义的数据类型指针存放自定义数据类型变量的地址 // 把指针指向具体的内存变量地址,就是指针赋值 int ii = 10;
char cc = 'A';
double dd = 100.56; int *pii = 0;
char *pcc = 0;
double *pdd = 0; pii = ⅈ // 整数型指针 并 指向变量ii; int sii = 0x149f8c388;
printf("pii 的值是%p \n", pii ); printf("sii的值是%p \n", sii);
printf("的值是\n" ); // 四、通过指针操作内存变量
/*
定义并指向变量 内存地址的 指针变量,
就可以通过指针操作内存变量操作。
效果与使用变量名相同
*/
int i4 = 10;
int *pi4 = 0; //定义整数型指针并初始化
pi4 = &i4; // 整数型指针变量pi4. &是操作符号 取地址 // 通过指针操作内存变量,改变内存变量的值
*pi4 = 20; // 同i4=20; /* 指针变量pi4
pi4 存放的是 i4 的地址
*pi4 是寻找 i4 存放的的值
*/
printf("pi4的值是%p\n", pi4);
printf("*pi4的值是:%d \n", *pi4);
printf("&pi4的值是:%d \n", &pi4);
printf("i4的值是:%d \n", i4);
// pi4 = pi4 -> i4;
// printf("%d", *pi4 ); char c = 'B';
char *cr = 0;
cr = &c;
*cr = 'C';
printf("c的值是:c% \n", c);
printf("*cr的值是:c% \n", *cr);
printf("cr的值是:%p \n", cr);
printf("&cr的值是:%p \n\n", &cr); // 五、函数参数的传递
int qq = 10;
printf("位置一:a是一个变量,地址是%p,a的值是%d \n", &qq, qq);
funcl(&qq);
printf("位置二:a是一个变量,地址是%p,a的值是%d \n", &qq, qq) //七、数组的地址
/*
数组占用的内存空间是连续的,
数组名==数组元素的首地址==数组的地址。
*/
char name[51];
strcpy(name, "C语言技术网");
printf("%p\n", name);
printf("%p\n", &name );
printf("%p\n", &name[0] ); printf("%s\n", name );
printf("%s\n", &name );
for(int j = 0; j < (sizeof(name) /sizeof(name[0])); j++) {
printf("%s\n", &name[j] ); } // 八、地址的运算
char ccc[4]; // 字符数组
int iii[4]; // 整数数组
double ddd[4]; // 浮点数组
memset(ccc, 0, sizeof(ccc));
char *pccc = ccc; memset(iii, 0, sizeof(iii));
memset(ddd, 0, sizeof(ddd));
// 用地址相加的方式显示数组全部元素的的址w
printf("%p", ccc );
printf("%p", pccc + 1);
// 以下通过数组常量+1访问地址的方法都是错的,只能定义指针变量,来递增访问
// printf("%p %p %p %p\n", ccc, ccc + 1, ccc + 2, ccc + 3);
//printf("%s %s\n", name, name + 1);
// printf("%p %p %p %p\n", iii, iii + 1, iii + 2, iii + 3);
// printf("%p %p %p %p\n", ddd, ddd + 1, ddd + 2, ddd + 3);
/*
第一行输出的每个地址的增量是1,
第二行的每个地址的增量是4,
第三行的每个地址的增量是8,为什么会这样?
因为数组cc是char型,一个存储单元是1个字节,
数组ii是int型,一个存储单元是4个字节,
数组ll是long型,一个存储单元是8个字节,
地址加1指的是下一个存储单元,不是数学意义中的1。
详见字符串章节。
*/ // 九、指针占用内存情况。
/*任何类型的指针占用八字节;*/
printf("sizeof(int *) is %d.\n", sizeof(int *));
// 输出:sizeof(int *) is 8
printf("sizeof(char *) is %d.\n", sizeof(char *));
// 输出:sizeof(char *) is 8
printf("sizeof(double *) is %d.\n", sizeof(double *));
// 输出:sizeof(double *) is 8 //十、其他--函数指针、指针的指针 return 0;
} void funcl(int *p) {
printf("位置三:p是一个指针 % p,指向的变量值是 % d \n", p, *p);
*p = 20;
printf("位置四:p是一个指针 % p,指向的变量值是 % d \n", p, *p);
}

指针_C的更多相关文章

  1. [错误记录_C] 还未给指针变量正确赋值的情况下,就使用它的值

    错误的代码: 错误的结果:  错误原因分析: 在使用(1) 将pB,pC的值赋给pA的lchild和rchild时: 还未给指针变量pB和pC赋值,现在pB和pC中存的是个垃圾值 Note: (2)- ...

  2. 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告

    2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一 ...

  3. 从汇编看c++多重继承中this指针的变化

    先来看一下下面的c++源码: #include <iostream> using namespace std; class X { public: virtual void print1( ...

  4. 类成员函数指针的特殊之处(成员函数指针不是指针,内含一个结构体,需要存储更多的信息才能知道自己是否virtual函数)

    下面讨论的都是类的非静态成员函数. 类成员函数指针的声明及调用: 1 2 3 4 5 6 7 //pr是指向Base类里的非静态成员函数的指针 //其行参为(int, int),返回值为void vo ...

  5. Asp.Net SignalR 使用记录 技术回炉重造-总纲 动态类型dynamic转换为特定类型T的方案 通过对象方法获取委托_C#反射获取委托_ .net core入门-跨域访问配置

    Asp.Net SignalR 使用记录   工作上遇到一个推送消息的功能的实现.本着面向百度编程的思想.网上百度了一大堆.主要的实现方式是原生的WebSocket,和SignalR,再次写一个关于A ...

  6. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  7. enote笔记法使用范例(2)——指针(1)智能指针

    要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...

  8. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  9. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  10. c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...

随机推荐

  1. Android 12(S) MultiMedia Learning(十)ACodec & OMX

    这一节的学习分为三块内容,omx hidl service用法.OMX架构.ACodec中的buffer分配. 1.omx hidl service system可以借助vndbinder来访问ven ...

  2. WPF多显示器问题 - WindowState

    标签 wpf multiple-monitors 一段时间以来,我一直试图让我的 WPF 应用程序跨越多个监视器,并且几乎可以正常工作.当我设置以下行时,问题似乎出现了: win1.WindowSta ...

  3. 一文搞懂 MySQL 日志

    前言 MySQL 的日志记录了运行的各种信息,是 MySQL 事务.性能.数据容灾.异常排查等的基础.本文将介绍 MySQL 一些关键日志的作用和原理. MySQL InnoDB 引擎重要的三个日志: ...

  4. firewall防火墙基础配置

    Firewalld防火墙 Centos7 中集成了防火墙管理工具, Firewall系统动态防火墙管理器是作为默认的防火墙工具. 它支持规则动态更新,并加入zone区域概念. Firewalld防火墙 ...

  5. 直播相关-搭建直播流服务器nodejs

    一.安装nodejs环境 去nodejs官方网站下载安装包 https://nodejs.org/en/#download 安装完成之后测试: LUNLI-MC1:~ lunli$ node -v v ...

  6. 初入JavaScript

    js是轻量级 弱类型 脚本语言 html是 超文本 标记语言 脚本语言和标记语言的主要区别 标记语言,可以通过浏览器直接执行 脚本语言,必须要通过编译,浏览器内核的编译,才能正常运行 简单理解,脚本语 ...

  7. 自定义动画 jquery的结束动画

      <button name="width">改变宽</button>     <button name="height"> ...

  8. zkq 数学听课笔记

    线性代数 域 \(F\),OI 中常用的域是 \(\Z_{p^c}\). \(n\) 维向量 \(\vec x \in F^n\),其中 \(x_i \in F\),注意向量是列向量. \(F^n\) ...

  9. NET9 提供HybridCache解决分布式缓存中存在的远程链接&序列化带来的性能问题

    下面是一个标准的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task&l ...

  10. 战66 WIN11 亮度热键 快捷键无效

    型号:HP ZHAN 66 Pro A 14 G3. 用FN 调节音量是正常的,唯独亮度无效. 参考:怎样调节笔记本电脑屏幕亮度(惠普笔记本亮度调节快捷键失灵) | 说明书网 (shuomingshu ...