指针的代码

// 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. 源码分析——MyBatis与Spring整合后如何保证SqlSession线程安全

    在MyBatis架构中SqlSession是提供给外层调用的顶层接口,它是MyBatis对外暴露的最重要的接口,用户通过该接口即可完成数据库的全部操作.在上文中我们明白了我们常用的Mybatis动态代 ...

  2. 在kubernetes里使用seccomp限制容器的系统调用

    目录 一.系统环境 二.前言 三.系统调用简介 四.使用seccomp限制docker容器系统调用 五.在kubernetes里使用seccomp限制容器的系统调用 5.1 配置seccomp允许po ...

  3. SwiftObject 杂记

    一.前言 看了一段时间的Swift,慢慢转变了一些对Swift的看法. Swift作为苹果新晋的开发语言.具有模板编程.函数编程.协议多继承.vTable静态绑定.值引用类型区分.Option类型等动 ...

  4. Anaconda安装Python的seaborn库

      本文介绍在Anaconda的环境中,安装Python语言中,常用的一个绘图库seaborn模块的方法.   seaborn模块是基于Matplotlib的数据可视化库,它提供了一种更简单.更漂亮的 ...

  5. 一个问题:六位八段数码管(Verilog)

    [基本信息] 需求:verilog程序,显示任意六位字符或数值,包含点号,且能够按需点亮位数.(学习篇) 芯片型号:cyclone Ⅳ EP4CE10F17C8 数码管属性:六位.八段 [最终成果图] ...

  6. #define、const和enum

    enum:枚举类型(枚举变量的值只能等于枚举中定义的常量) #define:明示常量(定义真正的常量) const:限定符(名不符实,应该叫read only),限定一个变量为只读 C语言常量: 1. ...

  7. Java爬虫-爬取疫苗批次信息

    今年3月份开始,就接到通知, 根据<关于开展有关人群第二剂次脊髓灰质炎灭活疫苗补种工作的通知>国疾控卫免发[2024]1号文件要求,在2016年3月1日至2019年9月30日之间出生的儿童 ...

  8. INFINI Labs 产品更新 | Gateway 支持基于 Kafka 的复制能力,发布 Helm Charts 部署方式

    INFINI Labs 产品又更新啦~.本次更新概要如下:Easysearch 新增了索引字段相关统计 API,优化了 source_reuse 提升压缩效率:Gateway 新增诸多新特性,如:支持 ...

  9. 喜讯!INFINI Easysearch 在墨天轮搜索型数据库排名中荣登榜首

    近日,2023 年 9 月的 墨天轮中国数据库流行度排行 火热出炉,本月共有 287 个数据库参与排名,中国数据库行业竞争日益激烈.其中,极限科技旗下软件产品 INFINI Easysearch 在 ...

  10. undefined,null 和 undeclared 有什么区别?

    a.null表示"没有对象",即该处不应该有值,转为数值时为0.典型用法是:作为函数的参数,表示该函数的参数不是对象.作       为对象原型链的终点. b.undefined表 ...