王老师 指针 第一讲
来源:互联网 发布:百度搜索源码 编辑:程序博客网 时间:2024/03/29 05:06
(1)概念:一块内存区域的地址
两重含义:
1.起始地址
2.长度
(2)定义语法:
类型名 * 变量名;
(3)指针运算
指针表达式:一个表达式,值是指针.
(4)指针做函数参数
(5)返回函数的指针
(6)指针数组
示例程序代码如下:
/*
* 2006.5.13
*/
#include "stdio.h"
#include "stdlib.h"
void findMaxAndMin(int array[], int n, int *p, int *q);
int *findMax(int array[], int n);
void sort(int array[], int n);
int buildeDic(char *dic, char *pointer[]);
void main(int argc, char * argv[])
{
for(int i = 1; i < argc; i++)
{
printf("%s/n", argv[i]);
}
/*
* 指针运算:
* 1.取地址
* 2.赋值
*/
int a = 3, *p = &a;
/*
* 3.取内容
*/
*p = *p + 1;
printf("%d/n", *p);
/*
* 4.指针表达式+-整数n
*/
int array[10];
for(i = 0; i < 10; i++)
array[i] = i;
p = array;
for(i = 0; i < 10; i++)
{
printf("%d/n", p);
p = p + 1;
}
/*
* 5.自增减
*/
p = array;
printf("p++: %d/n", p++);
printf("++p: %d/n", ++p);
/*
* 6.同类指针相减
*/
p = array;
int *q = p;
q = q + 10;
printf("q - p = %d/n", q - p);
/*
* 7.关系运算
*/
for(; p < q; p++)
{
printf("%d/n", *p);
}
/*
* 8.逻辑运算
*/
/*
* error!!!
* int *pointer;
* pointer = 3;
*/
int *pointer = NULL, *qointer = NULL;
if(pointer && qointer)
*pointer = 3;
/*
* 9.强制转换
*/
double d = 1.0;
char *c = (char *)&d;
/*
* 指针做函数参数,形参数组.
*/
int max, min;
findMaxAndMin(array, 10, &max, &min);
printf("max: %d, min: %d/n", max, min);
sort(array, 10);
for(i= 0; i < 10; i++)
printf("%d, ", array[i]);
/*
* 指针数组
*/
char dic[1000];
char *dic_pointer[100];
buildeDic(dic, dic_pointer);
}
/*
* 指针做函数参数,形参数组.
* 如果想要利用函数的参数返回计算结果,需要做到以下三点:
* 1.形参为指针
* 2.函数中有赋值语句
* 3.使用传址方式调用函数
*/
void findMaxAndMin(int array[], int n, int *p, int *q)
{
int i, max, min;
for(max = min = array[0], i = 1; i < n; i++)
{
if(array[i] > max)
{
max = array[i];
}
else
{
if(array[i] < min)
min = array[i];
}
}
*p = max;
*q = min;
}
/*
* 返回指针的函数
*/
int *findMax(int array[], int n)
{
int *max, *p = array + n;
for(max = array; array < p; array++)
{
if(*max < *array)
max = array;
}
return max;
}
/*
* 选择排序,调用指针函数findMax
*/
void sort(int array[], int n)
{
int x, *max;
while(n > 1)
{
max = findMax(array, n);
x = *max;
*max = array[n - 1];
array[n - 1] = x;
n--;
}
}
/*
* 指针数组:一个数组,每个元素都是指针
*/
int buildeDic(char *dic, char *pointer[])
{
printf("please input words, space by tab, ends with #./n");
int num = 0;
pointer[0] = dic;
while(1)
{
*dic = getchar();
if('a' < *dic && 'z' > *dic)
{
dic++;
continue;
}
if(*dic == ' ')
{
*dic ++ = '/0';
num++;
pointer[num] = dic;
}else{
*dic = '/0';
num++;
return num;
}
}
}
- 王老师 指针 第一讲
- 王老师 指针 第二讲
- 王老师 结构体 第一讲
- 王老师 C++ 函数重载和模板 第一讲
- 王老师 C++ 运算符重载 转换函数 第一讲
- 徐老师讲堂——第一讲(要点记录)
- 博客专栏--第一讲~~指针的概念
- C语言学习之指针第一讲
- 王老师 结构体 第二讲
- 王老师讲C语言结构
- 漫谈C指针第一讲---C语言变量的实质
- 美女老师讲JQuery
- 《笔记》孙鑫老师MFC第一讲(windows程序内部运行原理)
- 第一讲
- 第一讲
- 第一讲
- MFC 孙鑫老师第二讲中有关this指针的问题
- 王老师 C++ 函数重载和模板 第二讲
- 一个中国黑客致中国黑客和红客的公开信
- WinFX开发的新启示!
- Agile programming advice offered
- 源码的权利继续报道——CSDN外包实践(10)
- 又是新的一个平台了
- 王老师 指针 第一讲
- 让RCP程序自动加载新插件
- 求值顺序问题
- 要注意体育锻炼与工作相结合
- 程序员
- delphi中实现用字符串表示并操作控件的方法。
- 菜鸟求助:关于VC++和ADO代码出错
- could not find java 2 Runtime Environment
- 流的初体验(未完成)