指针的代码

// 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. Nginx 修饰符 Location 详解

    概述 location 指令可以用在虚拟服务器 server 部分,并且意味着提供来自客户端的 URI 或者内部重定向访问. location 的定义如下: location [modifier] u ...

  2. MySQL中drop/truncate/delete的区别

    1.Delete语句执行删除的过程是每次从表中删除一行,并且同时将删除操作作为事务记录在日志中保存以便进行进行回滚操作(只删除表数据). delete是DML,执行delete操作时,每次从表中删除一 ...

  3. OC的引用计数

    一.引用计数 引用计数是Objetive-C语言的内存管理机制,用于管理OC对象(通常指包含isa指针的结构体)的内存. 一个对象的引用计数为大于0的计数,表示这个对象被持有,不能被释放,当引用计数为 ...

  4. NOIP模拟67

    前言 从这一次到 71 都是多校联考了,尽管考的不咋样.. T1 数据恢复 解题思路 这个题真的是.. 先声明一个点,对于优先队列以及 set 都是在某个元素插入的时候进行比较,但是在之后如果修改比较 ...

  5. C#.NET CORE .NET8连接SQL SERVER 2008 R2 报:证书链是由不受信任的颁发机构颁发的

    一.C#.NET CORE .NET8连接SQL SERVER 2008 R2  报:证书链是由不受信任的颁发机构颁发的 报错内容: A connection was successfully est ...

  6. redis数据类型篇

    redis数据类型官网资料,https://redis.io/docs/manual/data-types/ 生产环境下的redis实况图 超哥这个redis实例里,db0库有140万个key. 1. ...

  7. 非空处理 Java非空判断 非空处理及mysql数据库字段的not null

    1.mysql## 去掉非空,如果非空又没有默认值,这样程序在添加数据的时候i,如果没有设置值就会报错.该操作很危险.##ALTER TABLE `order_test` ADD COLUMN `te ...

  8. LocalDateTime日期格式化和指定日期的时分秒

    LocalDateTime日期格式化和指定日期的时分秒 package com.example.core.mydemo.date; import java.time.LocalDate; import ...

  9. Thread交互及interrupt示例

    package com.test.docxml; /** Thread交互及interrupt示例 * 线程模拟:一个在睡觉,一个在敲墙,敲墙完成之后,把睡觉的吵醒了. */ public class ...

  10. 什么是浅拷贝和深拷贝,如何用 js 代码实现?

    〇.简介和对比 简介 浅拷贝:只复制原始对象的第一层属性值.   如果属性值是值类型,将直接复制值,本值和副本变更互不影响:   如果是引用数据类型,则复制内存地址,因此原始对象和新对象的属性指向相同 ...