// 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. python 小练习3

    求大蜜题:给你两个正整数a(0 < a < 100000)和n(0 <= n <=100000000000),计算(a^n) % 20132013并输出结果 ret = 1 d ...

  2. jackson实体转json时 为NULL不参加序列化的汇总

    首先加入依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson ...

  3. Hadoop---Java-API对HDFS的操作

    Java-API对HDFS的操作 哈哈哈哈,深夜来一波干货哦!!! Java-PAI对hdfs的操作,首先我们建一个maven项目,我主要说,我们可以通过Java代码来对HDFS的具体信息的打印,然后 ...

  4. Thinkphp5 Nginx Pathinfo配置

    server { listen ; server_name sui.com; root /tmmee/sad.cn/public; index index.php index.html index.h ...

  5. URL to load resources from the classpath in Java

    In Java, you can load all kinds of resources using the same API but with different URL protocols: fi ...

  6. Redis在CentOS7中的启动警告

    CentOS7安装Redis,启动时会出现如下图3个警告. 问题1:WARNING: The TCP backlog setting of 511 cannot be enforced because ...

  7. MSOCache office问题

    \MSOCache 链接:https://pan.baidu.com/s/1dVvjYnD0D6DG6oFK_Mww2w密码:qrvp undefied

  8. MySql查询最近一个月,一周,一天

    最近一个月 SELECT * FROM table WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(time); 本月.当前月 SELEC ...

  9. gpu内存查看命令nvidia-smi

    nvidia-smi nvidia-settings nvidia-xconfig

  10. jenkins部署web项目到tomcat(五)

    (1)maven构建web项目 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...