终极C语言指针
// ex1.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include <time.h> //1. 括号优先()[]
//2. 其它符号
void p1()
{
// 什么是指针? 是变量, 存放的是类型T的地址(指向类型T的地址)
int i = 1;
int *p = &i;
printf("i[%d] store in %p;\np[%p] store in %p, and solve p=[%d]", i, &i, p, &p, *p);
} void p2()
{
// 指针运算? 取类型T的地址;地址偏移;解地址
int i = 1;
int *pi = &i; // 取地址 (这里取出来的地址是一个常量, ***指针类型的常量--即常指针****)
//0X0024F7E4; 就是这个地址
//p = 0X0024F7E4; //这样赋值编译错误, 因为类型不同
pi = (int *)0X0024F7E4; // 这样就OK了 int **ppi = π // 指向指针
} void f3(int ia[100])
{
// 数组作为函数参数, **转化为指针
printf("\nsizeof(ia) in f3 is %d", sizeof(ia));
ia++; // 所以可以++ }
void p3()
{
// 指针与数组
int ia[100] = {1,2,3,4,5};
// ** 数组名
// 1. 声明时,产生数组名与其信息, 分配各元素空间
// 2. 表达式中, 数组名是常指针, 故不能a++; sizeof(数组名) = 数量 * sizeof(T)
printf("sizeof ia = %d, %p , %p, %p", sizeof(ia), ia, &ia, *&ia); // 数组是一个类型对象, (这里有系统隐含转换成地址)
// 3.数组名引用元素, ia[3] = *(ia + 3); 常指针偏移解值
printf("\na[3] = %d or %d ", ia[3], *(ia + 3)); // 表示ia 所指类型偏移加3
// 4. 作为函数参数, **转化为指针
f3(ia);
} void p4()
{
// 指向数组的指针
int ia[100], *ip = ia; // 指针,指向首元素
int matrix[50][100]; // matrix 是一个50元素数组; 元素类型是int [100];
int(*im)[100]; // 指针类型变量, 指向元素类型int [100];
im = matrix; // 指针, 指向首元素
printf("%p == %p; %p == %p", im, matrix, im + 1, matrix + 1); // 数组是一个类型对象, (这里有系统隐含转换成地址)
printf("\nsizeof(im) = %d, sizeof(matrix)=%d", sizeof(im), sizeof( matrix )); } void p5()
{
// 数组, 元素为字符
char cars[10];
// 指针, 指向元素类型, 元素类型为char;
char(*p);
p = cars; // 指针, 指向首元素 // 数组, 元素为指针
char *cars1[10];
// 指针, 指向元素类型, 元素类型为char*;
char* (*p1);
p1 = cars1;
// 数组, 元素为char* [10]
char *cars2[10][10];
// 指针, 指向元素类型, 元素类型为char*;
char* (*p2)[10];
p2 = cars2;
} void p6()
{
// 指针, 指针向函数
void(*f)(); // 指针f,指向一个函数, 函数的参数为空, 返回类型为void
f = p5; // 函数是一个类型对象, 这里系统隐式转换成了地址
f = &p5; // 这里显式取了函数的地址
f = *&p5; //
f(); // 指针隐式转函数, 调用
(*f)();// 指针显式转函数, 调用
printf("%p\n", p5);
printf("%p\n", &p5);
printf("%p\n", *&**&***p5); // 指针函数隐转了;要爆了!!! // 函数声明,f6, 返回指针类型; 仅声明
char* f6();
// 函数声明, f61, 参数(int), 返回一个指针;这个指针, 指向函数,该函数参数为(double*, char) ,返回值int
int (*f61(int))(double*, char);
} int _tmain(int argc, _TCHAR* argv[])
{
p4();
}
终极C语言指针的更多相关文章
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- C语言指针学习
C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- 关于C语言指针的问题
在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- C语言指针和数组知识总结(上)
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是: %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
- C语言指针操作
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...
随机推荐
- NOSQL -- Mongodb的简单操作与使用(win10)
NOSQL -- Mongodb的简单操作与使用(wins) MongoDB 创建集合: db.createCollection(name, options) use huhu db.createCo ...
- oracle 变量练习
select ename,&column2 from scott.emp; 输入sal: /替代标量: select * from &tab: select * from ...
- html 中一些不常见的标签
标签 描述 <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> 定义小号字. ...
- springboot aop 自定义注解方式实现一套完善的日志记录(完整源码)
https://www.cnblogs.com/wenjunwei/p/9639909.html https://blog.csdn.net/tyrant_800/article/details/78 ...
- Java线程池理解及用法
前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...
- chrome shortkeys
[{"action":"scrolldownmore","activeInInputs":true,"blacklist" ...
- corePoolSize和maxPoolSize的区别
受限于硬件.内存和性能,我们不可能无限制的创建任意数量的线程,每一台机器允许的最大线程是一个有界值.因此ThreadPoolExecutor管理的线程数量是有界的.线程池就是用这些有限个数的线程,去执 ...
- react router @4 和 vue路由 详解(一)vue路由基础和使用
完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...
- RBAC功能模块
- Win10系列:UWP界面布局进阶4
在开发Windows应用商店应用程序时,可以为页面中的界面元素添加快捷菜单,并设置与其相关的菜单项,用户通过选择快捷菜单中的菜单项来执行与被选择对象相关的操作.下面通过一个示例来介绍如何为页面中的一张 ...