分类:
2011-05-18 16:37:12
原文地址:C_指针(二) 作者:luozhiyong131
/*
*指针数组
*Lzy 2011-5-13
*/
#include
#include
int main()
{
int X[3][3] = {{1,2,3},{4,5,6},{7,8,9}};/*定义一个二维数组并初始化*/
//int X[3][3] = {1,2,3,4,5,6,7,8,9};
int *P[3] = {X[0],X[1],X[2]}; /*定义一个指针数组*/
int *ptr; /*定义一个指针变量*/
int **p; /*定义一个二级指针变量*/
int i;
ptr = P[0]; /*一级地址给指针变量ptr*/
for(i = 0; i < 3; i++)
printf("%d ",*ptr++); /*打印?*/
printf("\n----------\n");
p = P; /*二级地址给二级指针变量p*/
for(i = 0; i < 3; i++)
printf("%d ",**p++); /*打印?*/
printf("\n");
}
/*
*指向二维数组元素的指针变量
*Lzy 2011-5-13
*/
#include
int main()
{
int data[2][3] = {1,2,3,4,5,6}; /*二维数组初始化*/
int *ptr;
ptr = (int *)data; /*强制转换*/
for(; ptr < data[0] +6 /*ptr < data +2*/; ptr++)/*遍历二维数组*/
printf("%d ",*ptr);
printf("\n");
return 0;
}
/*
*指向一维数组的指针变量
*Lzy 2011-5-13
*/
#include
int main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};/*数组初始化*/ int (*p)[4]=a,*q=a[0];
int i;
for(i=0;i<3;i++)
{
if(i==0)
(*p)[i+i/2]=*q+1;
else
p++,++q;
}
for(i=0;i<3;i++)
printf("%d,",a[i][i]);
printf("%d,%d\n",*((int *)p),*q);
return 0;
}
3个学生各学4门课,计算总平均分,并输出第n个学生成绩
/*
*二维数组的指针作函数参数
*Lzy 2011-5-13
*/
#include
int main()
{
void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,67,79,60},{80,87,90,81},{90,99,100,98}};
average(score[1],4);
search(score,1);
return 0;
}
void search(float (*p)[4],int n)
{
int i;
for(i = 0; i < 4; i++)
printf("%5.2f\t",*(*(p+n)+i));
printf("\n");
}
void average(float *p,int n)
{
float sum = 0, aver;
float *p_end = p + n;
for(; p <p_end; p++)
sum += *p;
aver = sum / n;
printf("aver = %5.2f\n",aver);
}
/*
*指针与字符串
*Lzy 2011-5-13
*/
#include
int main()
{
char str[] = "I Love this girl!";
char *ptr = str;
printf("%s\n",ptr);
printf("%s\n",ptr + 7);
return 0;
}
/*
*用字符指针实现
*Lzy 2011-5-13
*/
#include
int main()
{
char *ptr = "I Love this girl!";
printf("%s\n",ptr);
printf("%s\n",ptr + 7);
return 0;
}
/*
*用字符指针实现(注意)
*Lzy 2011-5-13
*/
#include
int main()
{
char *ptr = "I Love this girl!";
*(ptr + 2) = 'l'; /*错误右边指向的是常量*/
printf("%s\n",ptr);
return 0;
}
用函数调用实现字符串复制
/*
*用字符数组作参数
*Lzy 2011-5-13
*/
#include
void strcpy(char from[], char to[])
{
int i = 0;
while(from[i])
{
to[i] = from[i];
i++;
}
to[i] = '\0';
printf("%s\n",to);
}
int main()
{
char str1[] = "I Love ";
char str2[] = "this girl!";
strcpy(str1,str2);
printf("%s\n",str2);
}
/*
*用字符指针作参数
*Lzy 2011-5-13
*/
#include
void strcpy(char *from, char *to)
{
while(*from)
{
*to = *from;
putchar(*to);
from++;
to++;
}
*to = '\0';
printf("\n");
}
int main()
{
char str1[] = "I Love ";
char str2[] = "this girl!";
strcpy(str1,str2);
printf("%s\n",str2);
}
/*
*函数指针调用函数
*Lzy 2011-5-13
*/
#include
#include
void fun(int); /* 函数声明 */
int main()
{
int x = 6;
void (*p)(int); /* 定义函数指针变量 */
p = &fun; /* 将fun函数的首地址赋给函数指针变量p*/
fun(x); /* 直接调用fun函数 */
(*p)(x); /* 通过函数指针变量p调用fun函数 */
return 0;
}
void fun(int x) /* 函数定义 */
{
printf("%d\n", x);
}
用函数指针变量作参数,求最大值、最小值和两数之和
/*
*函数指针作函数的参数
*Lzy 2011-5-13
*/
#include
int add(int x, int y)
{
return x+y;
}
int fun(int x, int y,int (*p)())
{
printf("结果:%d\n",(*p)(x,y));
}
int main()
{
int x, y;
printf("输入两个数:");
scanf("%d,%d",&x,&y);
fun(x,y,add);
}
/*
*返回指针值的函数
*Lzy 2011-5-13
*/
#include
char * strcpy(char from[], char to[])
{
int i = 0;
while(from[i])
{
to[i] = from[i];
i++;
}
to[i] = '\0';
return to;
}
int main()
{
char str1[] = "I Love ";
char str2[] = "this girl!";
printf("%s\n",strcpy(str1,str2));
}
写一个函数,求两个int型变量中居于较大值的变量的地址
/*
*返回指针值的函数
*Lzy 2011-5-13
*/
#include
int * fun(int *a, int *b)
{
if(*a > *b)
return a;
else
return b;
}
int main()
{
int a = 2, b = 3;
printf("%x\n",fun(&a,&b));
return 0;
}
/*
*指针数组
*Lzy 2011-5-13
*/
#include
int main()
{
char *name[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer"};
int i;
for(i = 0; i < 5; i++)
printf("%s\n",name[i]);
}
/*
*野指针
*Lzy 2011-5-13
*/
#include
int main(int argc, char *argv[])
{
int *p;
p = (int *)malloc(sizeof(int)); /*在堆中分配内存空间*/
*p = 0;
printf("%d\n",*p);
free(p); /*释放空间*/
*p = 5; /*(危险)野指针*/
printf("%d\n",*p);
p = NULL;
}
其他:1、.编写一函数,用于接收3-10之间的一个数,然后输出由星号组成的正方形。例如,用户输入4,输出结果应为如下所示
****
* *
* *
****
/***************************************************
文件名:
说 明:熟习函数的使用,完成打印正方形图形
Autor:Lzy
Time :2011-5-8
****************************************************/
#include
int init()
{
int n = 0;
while(n > 11 || n < 2) /*判断输入是否合法,否则重新输入*/
{
printf("输入正方形的长度(大于2小于11):");
scanf("%d",&n);
}
return n;
}
void fprint(int N)
{
int i, j;
for(i = 0; i < N; i++)
printf("*");
printf("\n");
for(i = 0; i < N-2; i++)
{
printf("*");
j = N - 2;
while(j--)
printf(" ");
printf("*\n");
}
for(i = 0; i < N; i++)
printf("*");
printf("\n");
}
int main()
{
int side;
side = init();
fprint(side);
}
2、编写一个函数,输入字符串内,如果是两个以上连续空格,则用一个空格代替
/******************************************
文件名:
说 明:continue的使用
Autor:Lzy
Time :2011-5-9
*******************************************/
#include
int main()
{
char c;
char flag = 0;
while((c = getchar()) != EOF)
{
if(flag == c)
if( c == ' ')
continue;
putchar(c);
flag = c;
}
}
3、写一个函数找出一个整数数组中,第二大的数
#include
#define N 5
int main()
{
int data[N] = {8,2,6,4,5};
int i,j;
int temp;
for(j = 0; j < N ; j++)
for(i = j; i < N-1 ; i++)
{
if(data[j] > data[i+1])
{
temp = data[j] ;
data[j] = data[i+1];
data[i+1] = temp;
}
}
printf("%d ",data[N-2]);
return 0;
}
——第二部分:Linux C