//
// main.c
// 指针基本操作
//
// Created by zhangxueming on 15/6/3.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
//
#include <stdio.h>
//地址:
//变量定义在内存中, 也有自己的地址
//int a;
//通过&获取变量在内存中的位置
//int main(int argc, const char * argv[]) {
// int a=100;
// printf("%p\n", &a);
// return 0;
//}
//指针变量: 保存变量内存地址的工具
//本质是变量,保存其它变量的地址
//int *p = &a;
//数据类型(指针指向变量的数据类型) + *(指针变量说明符) + 变量名;
//int * 是指针变量的类型
//int main(int argc, const char *argv[])
//{
// int a=100;
// int *p = &a;
// printf("%p\n", &a);
// printf("%p\n", p);
//
// //指针变量也有自己地址
// printf("%p\n", &p);
//
// return 0;
//}
//间接寻址 *
//通过变量的地址寻址到对应地址的变量空间
//* & 是一对互逆运算符
//int main(int argc,const char *argv[])
//{
// int a=100;
// int *p = &a;
//
// printf("%p\n", &a);
//
// printf("a= %d\n", *p);
// printf("a = %d\n", *&a);
// printf("a = %d\n", a);
//
// return 0;
//}
//指针变量的大小
//只跟平台有关, 32位平台占4字节 64位平台占8字节
//int main(int argc,const char *argv[])
//{
// printf("size = %lu\n", sizeof(char *));
// printf("size = %lu\n", sizeof(int *));
// printf("size = %lu\n", sizeof(long *));
// printf("size = %lu\n", sizeof(double *));
// return 0;
//}
//int main(int argc, const char *argv[])
//{
// int a=100;
// int *p= &a;
// int *q= p;//指针变量可以直接给指针变量赋值
//
// *p = 200;
// printf("a = %d\n", *q);
// *q = 300;
// printf("a = %d\n", *p);
//
// return 0;
//}
//泛型指针
//void *
//int main(int argc, const char *argv[])
//{
// int a=100;
// long b = 200;
// float f=3.14;
//
// void *p = &a;
// printf("a = %d\n", *(int *)p);
// p = &b;
// printf("b = %ld\n", *(long *)p);
// p = &f;
// printf("f = %f\n", *(float *)p);
//
// return 0;
//}
//空指针
//NULL
//#define NULL ((void *)0)
//野指针
//1. 定义了指针变量后没有给初值
//2. 指针变量指向的内存空间被释放
#include <stdlib.h>
//int main(int argc,const char *argv[])
//{
// char *p=NULL;
// //1.申请内存
// p = (char *)malloc(100);
// //2.判断内存是否申请成功
// if(!p)
// {
// return -1;
// }
// //3.使用内存
// scanf("%s", p);
// printf("%s\n", p);
// //4.释放内存
// free(p);
// //5.
// p = NULL;
//
// return 0;
//}
// 0 '\0' '\n' NULL "0" "\0" ' '
//
//int main(int argc, const char *argv[])
//{
// printf("%d", '\n');
// return 0;
//}
//指针运算
//++ --
//指针变量改变的长度为指针指向的数据类型的长度
//int main(int argc,const char *argv[])
//{
// int a[10]={1,2,3,4,5,6,7,8,9,10};// a[0] int &a[0] int *
// int *p = a;
//
// printf("a[0]=%d\n", *p);
// printf("%p\n", p);
// p++;//sizeof(int)
//
// printf("a[1]=%d\n", *p);
// printf("%p\n", p);
//
// p++;
// printf("a[2]=%d\n", *p);
// printf("%p\n", p);
//
// p--;
// printf("%p\n", p);
// p--;
// printf("%p\n", p);
//
// return 0;
//}
//int main(int argc,const char *argv[])
//{
// char ch= 'a';
// char *p = &ch;
// printf("%p\n", p);
// p++;
// printf("%p\n", p);
// p++;
// printf("%p\n", p);
// p++;
// printf("%p\n", p);
// return 0;
//}
//减法运算
//元素个数
//不同类型的指针不能进行减法运算
//指针不能进行加法运算
int main(
int argc,
const char *
argv[])
{
int a[
10]=
{};
int *p =
a;
int *q = &a[
5];
printf("%p %p\n", p,q);
printf("%ld\n", q-p);
//(q - p)/sizeof(int)
return 0;
}
转载于:https://www.cnblogs.com/0515offer/p/4548741.html
转载请注明原文地址: https://win8.8miu.com/read-1541876.html