20150603指针基本操作及应用
2015-06-09 19:36
369 查看
//
// main.c
// IOS150603
//
// Created by
Peng Junlong on 15/6/3.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#include <stdio.h>
//*************************
//* *
//* 指针基本操作 *
//* *
//*************************
//地址:变量定义在内存中,也有自己的地址
//int a;
//通过&获取变量在内存的位置,%p占位符用来打印地址
//int main(int arg ,const char *argv[])
//{
// int a = 100;
// printf("%p\n",&a);
// return 0;
//}
//指针变量:是保存变量内存地址的工具;本质是变量,保存其他变量的地址
//int *p = &a;
//数据类型(指针指向变量的数据类型)+* (指针变量说明符)+变量名;
//int * 是指针变量的类型
//int main(int arg ,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 arg ,const char *argv[])
//{
// int a = 100;
// int *p = &a;
// printf("a = %d\n",*p);
// printf("a = %d\n",*&a);
// printf("a = %d\n",a);
//}
//指针变量的大小:只跟平台有关系,32平台占4个字节,64位平台占用8个字节
//int main(int arg ,const char *argv[])
//{
// printf("char * size = %lu\n",sizeof(char *));
// printf("int * size = %lu\n",sizeof(int *));
// printf("float * size = %lu\n",sizeof(float *));
// printf("double * size = %lu\n",sizeof(double *));
// printf("long * size = %lu\n",sizeof(long *));
//
// return 0;
//}
//多个指针指向同一个变量
//int main(int arg , const char *argv[])
//{
// int a = 100;
// int *p = &a;
// int *p1 = p;//指针变量可以直接给指针变量赋值
// printf("a = %d\n",*p);
// printf("a = %d\n",*p1);
// return 0;
//}
//泛型指针:可以指向任意变量类型的地址
//void *
//int main(int arg,const char *argv[])
//{
// int a = 100;
// long b = 200;
// float c = 3.144;
// void *p = &a;
// printf("a = %d\n",*(int *)p); //在访问对应的内存空间时,需要指定对应的数据类型,进行强制类型转换
// p = &b;
// printf("a = %ld\n",*(long *)p);
// p = &c;
// printf("a = %f\n",*(float *)p);
// return = 0
//}
//空指针:NULL
//#define NULL ((void *)0);操作系统预留出来的地址,没有使用,任何类型的指针都可以指向它
//野指针:
//1.定义了指针变量后没有给初值
//2.指针变量指向的内存空间被释放
//#include <stdlib.h>
//int main(int arg,const char *argv[])
//{
// int *p = NULL;
// //1.申请内存
// p = (int *)malloc(100); //指向分配的内存空间的首地址
// //2.判断内存是否申请成功
// if(!p)
// return -1;
// //3.使用内存
// scanf("%d",p);
// printf("%d\n",*p);
// //4.释放内存
// free(p);
// p = NULL; //若不指向NULL,则p变成野指针
//
// return 0;
//}
//指针运算
//++ --
//指针变量改变的长度为指针指向的数据类型的长度
//int main(int arg ,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("%d\n",*p);
// for (int i=0; i<10; i++) {
// printf("%d\n",*(p+i)); //指针加1,跳过的字节数是指针指向的数据类型的长度,
// printf("%p\n",(p+i)); //在这里指跳过的是4个字节sizeof(int)
//
// }
//
// char ch = 'a';
// char *p1 = &ch;
// printf("%p\n",p1);
// p1++;
// printf("%p\n",p1);
// return 0;
//}
//减法运算
//两个指针进行减法运算得到的是两个指针地址之间的元素个数
//不同类型的指针不能进行减法运算
//指针不能进行加法运算,因为可能会超过内存边界
//int main(int arg ,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;
//}
//
// applicationOfPointer.c
// IOS150603
//
// Created by
Peng Junlong on 15/6/3.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
//*************************
//* *
//* 指针的应用 *
//* *
//*************************
#include <stdio.h>
//void swap(int *a,int *b)
//{
// int p = *a;
// *a = *b;
// *b = p;
//}
//int main(int arg,const char *argv[])
//{
// int a = 10;
// int b =20;
// printf("a = %p,b = %p\n",&a,&b);
// printf("a = %d,b = %d\n",a,b);
// swap(&a,&b);
// printf("a = %p,b = %p\n",&a,&b);
// printf("a = %d,b = %d\n",a,b);
// return 0;
//}
//利用指针输入10个数到数组中,再输出
//int main(int arg ,const char *argv[])
//{
// int a[10];
// int *p = a;
// for (int i=0; i<10; i++) {
// scanf("%d",p+i);
// }
// for (int i=0; i<10; i++) {
// printf("a[%d]=%d ",i,*(p+1));
// }
//
// return 0;
//}
//指针实现数组逆序
//void reverseArray(int *a,int len)
//{
// for (int i=0; i<len/2; i++) {
// int temp = *(a+i);
// *(a+i) = *(a+len-i-1);
// *(a+len-i-1) = temp;
// }
//}
//int main(int arg ,const char *argv[])
//{
// int a[10];
// int *p = a;
// for (int i=0; i<10; i++) {
// scanf("%d",p+i);
// }
// reverseArray(a, 10);
// for (int i=0; i<10; i++) {
// printf("a[%d]=%d ",i,*(a+i));
// }
//
// return 0;
//}
//void replace(char *array,char old ,char new ,int len)
//{
// for (int i=0; i<len; i++) {
// if (*(array+i) == old) {
// *(array+i) = new;
// }
// }
//}
//int main(int arg ,const char *argv[])
//{
// char array[10];
// char *p = array;
// char old;
// char new;
// for (int i=0; i<10; i++) {
// scanf("%c",p+i);
// }
// getchar();
// printf("输入 old:");
// scanf("%c",&old);
// getchar();
// printf("输入new:");
// scanf("%c",&new);
// replace(array,old,new,10);
// for (int i=0; i<10; i++) {
// printf("%c",*(array+i));
// }
// return 0;
//}
//void insert(char *array,int index,char new ,int length)
//{
// for (int i=length-1; i>=index; i--) {
// *(array+i+1)=*(array+i);
// }
// *(array+index) = new;
//}
//int main(int arg,const char *argv[])
//{
// char array[12] = "helloworld";
// insert(array, 6, 'A', 10);
// printf("%s\n",array);
// return 0;
//}
//const 与 指针
//只读的
//const type name
//type const name
int main(int arg,const char *argv[])
{
const int a = 100;
//a = 200; // a是只读的,不能进行修改,在这里进行会报错
//****************************************************
int b = 10;
int c = 20;
const int *p = &b; //const 是修饰*p,在这里*p是只读的,p是可读可写的
//*p = 30; //这里是错误的
p = &c;
//****************************************************
int d = 10;
const int *const q = &d;//*q 和q都是只读的
//****************************************************
int e = 10;
const int *p1 = &e,q1 = 20;//*p1和q1都是只读的,p1是可读可写的
const int *const p2,*q2; //p2,*p2,*q2都是只读的,q2是可读可写的
const int *const p3,*const q3; //p3,*p3,q3,*q3都是只读的
return 0;
}
// main.c
// IOS150603
//
// Created by
Peng Junlong on 15/6/3.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
#include <stdio.h>
//*************************
//* *
//* 指针基本操作 *
//* *
//*************************
//地址:变量定义在内存中,也有自己的地址
//int a;
//通过&获取变量在内存的位置,%p占位符用来打印地址
//int main(int arg ,const char *argv[])
//{
// int a = 100;
// printf("%p\n",&a);
// return 0;
//}
//指针变量:是保存变量内存地址的工具;本质是变量,保存其他变量的地址
//int *p = &a;
//数据类型(指针指向变量的数据类型)+* (指针变量说明符)+变量名;
//int * 是指针变量的类型
//int main(int arg ,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 arg ,const char *argv[])
//{
// int a = 100;
// int *p = &a;
// printf("a = %d\n",*p);
// printf("a = %d\n",*&a);
// printf("a = %d\n",a);
//}
//指针变量的大小:只跟平台有关系,32平台占4个字节,64位平台占用8个字节
//int main(int arg ,const char *argv[])
//{
// printf("char * size = %lu\n",sizeof(char *));
// printf("int * size = %lu\n",sizeof(int *));
// printf("float * size = %lu\n",sizeof(float *));
// printf("double * size = %lu\n",sizeof(double *));
// printf("long * size = %lu\n",sizeof(long *));
//
// return 0;
//}
//多个指针指向同一个变量
//int main(int arg , const char *argv[])
//{
// int a = 100;
// int *p = &a;
// int *p1 = p;//指针变量可以直接给指针变量赋值
// printf("a = %d\n",*p);
// printf("a = %d\n",*p1);
// return 0;
//}
//泛型指针:可以指向任意变量类型的地址
//void *
//int main(int arg,const char *argv[])
//{
// int a = 100;
// long b = 200;
// float c = 3.144;
// void *p = &a;
// printf("a = %d\n",*(int *)p); //在访问对应的内存空间时,需要指定对应的数据类型,进行强制类型转换
// p = &b;
// printf("a = %ld\n",*(long *)p);
// p = &c;
// printf("a = %f\n",*(float *)p);
// return = 0
//}
//空指针:NULL
//#define NULL ((void *)0);操作系统预留出来的地址,没有使用,任何类型的指针都可以指向它
//野指针:
//1.定义了指针变量后没有给初值
//2.指针变量指向的内存空间被释放
//#include <stdlib.h>
//int main(int arg,const char *argv[])
//{
// int *p = NULL;
// //1.申请内存
// p = (int *)malloc(100); //指向分配的内存空间的首地址
// //2.判断内存是否申请成功
// if(!p)
// return -1;
// //3.使用内存
// scanf("%d",p);
// printf("%d\n",*p);
// //4.释放内存
// free(p);
// p = NULL; //若不指向NULL,则p变成野指针
//
// return 0;
//}
//指针运算
//++ --
//指针变量改变的长度为指针指向的数据类型的长度
//int main(int arg ,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("%d\n",*p);
// for (int i=0; i<10; i++) {
// printf("%d\n",*(p+i)); //指针加1,跳过的字节数是指针指向的数据类型的长度,
// printf("%p\n",(p+i)); //在这里指跳过的是4个字节sizeof(int)
//
// }
//
// char ch = 'a';
// char *p1 = &ch;
// printf("%p\n",p1);
// p1++;
// printf("%p\n",p1);
// return 0;
//}
//减法运算
//两个指针进行减法运算得到的是两个指针地址之间的元素个数
//不同类型的指针不能进行减法运算
//指针不能进行加法运算,因为可能会超过内存边界
//int main(int arg ,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;
//}
//
// applicationOfPointer.c
// IOS150603
//
// Created by
Peng Junlong on 15/6/3.
// Copyright (c) 2015年 Peng Junlong. All rights reserved.
//
//*************************
//* *
//* 指针的应用 *
//* *
//*************************
#include <stdio.h>
//void swap(int *a,int *b)
//{
// int p = *a;
// *a = *b;
// *b = p;
//}
//int main(int arg,const char *argv[])
//{
// int a = 10;
// int b =20;
// printf("a = %p,b = %p\n",&a,&b);
// printf("a = %d,b = %d\n",a,b);
// swap(&a,&b);
// printf("a = %p,b = %p\n",&a,&b);
// printf("a = %d,b = %d\n",a,b);
// return 0;
//}
//利用指针输入10个数到数组中,再输出
//int main(int arg ,const char *argv[])
//{
// int a[10];
// int *p = a;
// for (int i=0; i<10; i++) {
// scanf("%d",p+i);
// }
// for (int i=0; i<10; i++) {
// printf("a[%d]=%d ",i,*(p+1));
// }
//
// return 0;
//}
//指针实现数组逆序
//void reverseArray(int *a,int len)
//{
// for (int i=0; i<len/2; i++) {
// int temp = *(a+i);
// *(a+i) = *(a+len-i-1);
// *(a+len-i-1) = temp;
// }
//}
//int main(int arg ,const char *argv[])
//{
// int a[10];
// int *p = a;
// for (int i=0; i<10; i++) {
// scanf("%d",p+i);
// }
// reverseArray(a, 10);
// for (int i=0; i<10; i++) {
// printf("a[%d]=%d ",i,*(a+i));
// }
//
// return 0;
//}
//void replace(char *array,char old ,char new ,int len)
//{
// for (int i=0; i<len; i++) {
// if (*(array+i) == old) {
// *(array+i) = new;
// }
// }
//}
//int main(int arg ,const char *argv[])
//{
// char array[10];
// char *p = array;
// char old;
// char new;
// for (int i=0; i<10; i++) {
// scanf("%c",p+i);
// }
// getchar();
// printf("输入 old:");
// scanf("%c",&old);
// getchar();
// printf("输入new:");
// scanf("%c",&new);
// replace(array,old,new,10);
// for (int i=0; i<10; i++) {
// printf("%c",*(array+i));
// }
// return 0;
//}
//void insert(char *array,int index,char new ,int length)
//{
// for (int i=length-1; i>=index; i--) {
// *(array+i+1)=*(array+i);
// }
// *(array+index) = new;
//}
//int main(int arg,const char *argv[])
//{
// char array[12] = "helloworld";
// insert(array, 6, 'A', 10);
// printf("%s\n",array);
// return 0;
//}
//const 与 指针
//只读的
//const type name
//type const name
int main(int arg,const char *argv[])
{
const int a = 100;
//a = 200; // a是只读的,不能进行修改,在这里进行会报错
//****************************************************
int b = 10;
int c = 20;
const int *p = &b; //const 是修饰*p,在这里*p是只读的,p是可读可写的
//*p = 30; //这里是错误的
p = &c;
//****************************************************
int d = 10;
const int *const q = &d;//*q 和q都是只读的
//****************************************************
int e = 10;
const int *p1 = &e,q1 = 20;//*p1和q1都是只读的,p1是可读可写的
const int *const p2,*q2; //p2,*p2,*q2都是只读的,q2是可读可写的
const int *const p3,*const q3; //p3,*p3,q3,*q3都是只读的
return 0;
}
相关文章推荐
- 程序员必读的职业规划书之摘要
- js实现小时钟,js中Date对象的使用?
- NSURLRequestCachePolicy 缓存策略
- 利用HtmlAgilityPack库进行HTML数据抓取
- HttpClient几种实现方式
- Qt5.0 https
- 第14周-输入输出流,文本文件-项目3-OOP版电子词典
- 20150601数组练习
- 20150602函数
- 在Ubuntu Linux下怎样安装QQ
- 一张图记住常用 Linux 系统性能诊断工具
- hdu 5265 pog loves szh II
- sizeHint() minimumSizeHint() sizePolicy() 的使用
- WINRAR4.2破解方式或注册码
- 20150528循环
- 20150601数组
- opencv霍夫变换检测圆cvHoughCircles和直线cvHoughLines2的应用
- 第十四周 程序阅读三
- Qt 自定义 滚动条 样式
- SkinPP for VC