指针的代码

// 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. HTML——文件上传域

    文件上传是网站中一种常见的功能.例如百度网盘.QQ 邮箱以及有道云笔记都可以实现文件的上传.在 HTML 中,把 <input> 标签的 type 属性设置为 file 就可以实现上传文件 ...

  2. kubernetes 二次开发-认证,鉴权(1)

    基于webhook的认证 授权过程 认证授权服务需要满足如下kubernetes的规范 kubernetes api-server组件发送 http post 请求 url:https://authn ...

  3. CENTOS6.8 修改主机名

    1.临时修改主机名   显示主机名:spark@master:~$ hostnamemaster修改主机名:spark@master:~$ sudo hostname hadoopspark@mast ...

  4. openstack nova 报错

    openstack compute service list The server is currently unavailable. Please try again at a later time ...

  5. 在webpack中运行vue

    网址:https://vue-loader.vuejs.org/zh/ Vue Loader 是一个 webpack 的 loader,它允许你以一种名为单文件组件的格式撰写 Vue 组件 安装loa ...

  6. linux系统下,安装maven教程

    1.下载 官网:https://maven.apache.org/download.cgi 2.上传包 将下载好的maven安装包apache-maven-3.8.6-bin.tar.gz放在磁盘的 ...

  7. work04

    第一题: 分析以下需求,并用代码实现(每个小需求都需要封装成方法) 1.求两个数据之和(整数 小数),在main方法中打印出来 2.判断两个数据是否相等(整数 小数),在控制台上打印出来 3.获取两个 ...

  8. Java线程池maximumPoolSize和workQueue哪个先饱和?

    先说结论,真正的饱和顺序是corePoolSize -> workQueue -> maximumPoolSize. 我们都知道,线程池有以下参数 ThreadPoolExecutor(i ...

  9. CAT监控指标

    CAT监控指标 CAT 是基于 Java 开发的实时应用监控平台.官方文档:https://github.com/dianping/cat CAT提供以下几种报表:Transaction报表 一段代码 ...

  10. 面试官:Java中缓冲流真的性能很好吗?我看未必

    一.写在开头 上一篇文章中,我们介绍了Java IO流中的4个基类:InputStream.OutputStream.Reader.Writer,那么这一篇中,我们将以四个基类所衍生出来,应对不同场景 ...