终极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. ...
随机推荐
- 移除input框type="number"在部分浏览器的默认上下按钮
input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none !impor ...
- Python条件判断和循环,range()函数
条件判断经常使用if语句进行判断,表达方式为:if 条件语句: :elif:else if...用于执行第一条不满足if的判断,继续执行其它的判断.比如一个简单的if判断 Python3取消 ...
- Segments
Segments Given n segments in the two dimensional space, write a program, which determines if there e ...
- ScheduledThreadPoolExecutor
java提供了方便的定时器功能,代码示例: public class ScheduledThreadPool_Test { static class Command implements Runnab ...
- 牛客网 PAT 算法历年真题 1002 :数字分类 (20)
1002 :数字分类 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一系列正整数,请按要求对数字 ...
- az nginx install and other
Nginx 1◆ nginx install 源码:https://trac.nginx.org/nginx/browser 官网:http://www.nginx.org/ ...
- Sql server中 如何用sql语句创建视图
1.视图的作用 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 采购人员,可以需要一些与其有关的数据,而与 ...
- NTT模板(无讲解)
#include<bits/stdc++.h>//只是在虚数部分改了一下 using namespace std; typedef long long int ll; ; ; ; ; ll ...
- JavaScript -基础- 函数与对象(三)正则、Match对象
一.正则对象 1.创建方法 1)方式一 var re_obj=new RegExp("\d+","g") 规则+模式(g 全局模式/i 不区分大小写/gi) r ...
- MySQl 主从配置实战
目前后台数据库使用了一个实例做数据统计分析,随着数据井喷,单个实例无法做数据分析.故开始了读写分离. 1.主配置 [client] port = 3306 socket = /tmp/mysql-33 ...