指针_C
指针的代码
// 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的更多相关文章
- [错误记录_C] 还未给指针变量正确赋值的情况下,就使用它的值
错误的代码: 错误的结果: 错误原因分析: 在使用(1) 将pB,pC的值赋给pA的lchild和rchild时: 还未给指针变量pB和pC赋值,现在pB和pC中存的是个垃圾值 Note: (2)- ...
- 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告
2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一 ...
- 从汇编看c++多重继承中this指针的变化
先来看一下下面的c++源码: #include <iostream> using namespace std; class X { public: virtual void print1( ...
- 类成员函数指针的特殊之处(成员函数指针不是指针,内含一个结构体,需要存储更多的信息才能知道自己是否virtual函数)
下面讨论的都是类的非静态成员函数. 类成员函数指针的声明及调用: 1 2 3 4 5 6 7 //pr是指向Base类里的非静态成员函数的指针 //其行参为(int, int),返回值为void vo ...
- Asp.Net SignalR 使用记录 技术回炉重造-总纲 动态类型dynamic转换为特定类型T的方案 通过对象方法获取委托_C#反射获取委托_ .net core入门-跨域访问配置
Asp.Net SignalR 使用记录 工作上遇到一个推送消息的功能的实现.本着面向百度编程的思想.网上百度了一大堆.主要的实现方式是原生的WebSocket,和SignalR,再次写一个关于A ...
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- c 数组与指针的使用注意事项
数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...
随机推荐
- vue我自己的动态菜单思路
1.在router里把所有的路由都加上. 2.后端存储路由path和其他设计需要的信息. 3.登录后,后端返回菜单树,根据权限不同,返回的菜单不同,并且还要返回每个path代表的页面具有的权限数组.可 ...
- IceRPC之多路复用传输>快乐的RPC
作者引言 很高兴啊,我们来到了IceRPC之多路复用传输>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界. icerpc 和多路复用传输 了解 icerpc 协议和多路复用 ...
- Vue 页面传参方式 Query 和 Params
1. query 与 params 传参 query 需要和配合 path 属性使用,携带参数会拼接在请求路径后,效果同 Get 请求方式 http://localhost:8033/Permissi ...
- const与指针的组合
① const int *p; //指向一个整型常量的指针,p可变,p指向的对象不可变. ② int const *p; //同上. ③ int * const p; //p不可变,p指向的对象可变( ...
- uview 滑动切换
```html <template> <view class="content"> <!-- <u-row justify="spac ...
- 搭建k8s集群完整版本
搭建k8s集群完整版 基础设置 设置主机ip nmcli con add ifname ens33 con-name ens33 autoconnect yes type ethernet nmcli ...
- 箭头函数 函数中的this指向
// 箭头函数 // 在匿名函数中,使用 => 箭头来替换 关键词 function // 箭头定义下 () 和 {} 之间 // 等于在使 ...
- xv6 的锁机制
LOCK 公众号:Rand_cs 锁,大家应该很熟悉了,用来避免竞争,实现同步.本文以 xv6 为例来讲解锁本身是怎么实现的,废话不多说,先来看一些需要了解的概念: 一些概念 公共资源:顾名思义就是被 ...
- categraf托管与自升级
categraf支持多种方式进行部署.托管,社区里部署和管理categraf也是五花八门,大家自己使用方便即可. 之前我们觉得大家通过ansible之类的工具批量下发/更新就能很简单地完成任务,最近很 ...
- The bean ‘xxx‘ could not be injected as a ‘xxx‘because it is a JDK dynamic proxy that implements错误解决
1.解决方法:使用@Autowired 2.@autowired和@resource注解的区别区别:1.@Autowired注解由Spring提供,只按照byType注入:@resource注解由J2 ...