// 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语言指针的更多相关文章

  1. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  2. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  3. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  4. C语言指针学习

    C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...

  5. (转载)c语言指针学习

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  6. 关于C语言指针的问题

    在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...

  7. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  8. C语言指针和数组知识总结(上)

    C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...

  9. C语言指针操作

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...

随机推荐

  1. 时间序列(六): 炙手可热的RNN: LSTM

    目录 炙手可热的LSTM 引言 RNN的问题 恐怖的指数函数 梯度消失* 解决方案 LSTM 设计初衷 LSTM原理 门限控制* LSTM 的 BPTT 参考文献: 炙手可热的LSTM 引言 上一讲说 ...

  2. Utils--前台调用后台接口工具类

    Utils--前台调用后台接口工具类 package com.taotao.manage.httpclient; import java.io.IOException; import java.net ...

  3. pyqt实现滑动开关

    https://www.cnblogs.com/feiyangqingyun/p/6035633.html 根据Qt的实现,在PyQt上面实现了滑动开关的控件 import sys from PyQt ...

  4. Vmware tools install

    Vmware tools 1◆ 下载 2◆ diagram   Ifcfg-eth0   =====>关闭防火墙 systemctl stop firewalld.service   ===== ...

  5. 记录一次面试中的HTTP请求相关问题

    1.HTTP中的状态码分别代表什么 比较基础,自行百度.   2.HTTP请求,响应头部content-length用来做什么的 答:Content-Length首部告诉浏览器报文中实体主体的大小.这 ...

  6. 遍历所有子物体中renderer(渲染器)中的material(材质)

    //得到所有可渲染的子物体Renderer[] rds = transform.GetComponentsInChildren<Renderer>();//逐一遍历他的子物体中的Rende ...

  7. day20-正则表达式练习

    import re from re import findall,search,S secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdf ...

  8. [BZOJ3173]最长上升子序列

    Problem 给你n个数A1~An,每次将i插入第Ai位后,最后输出每次插入后这个数列的最长上升子序列 Solution 这道题非常的妙.首先如果新加入的这个数构成了最长上升子序列,由于在它插入之前 ...

  9. 锤子科技 Smartisan M1L 咖啡金 真皮背面 高配版 5.7

    http://www.smartisan.com/m1/#/os    快人一步的OS http://www.smartisan.com/shop/#/buyphone?c=coffee&v= ...

  10. :工厂模式1:方法模式--Pizza

    #ifndef __PIZZA_H__ #define __PIZZA_H__ class Pizza { public: Pizza(){} virtual ~Pizza(){} virtual c ...