//
// main.c
// 指针高级
//
// Created by zhangxueming on 15/6/4.
// Copyright (c) 2015年 zhangxueming. All rights reserved.
//
#include <stdio.h>
//指针的数组(指针数组)
//本质是数组, 数组中的每一个元素都是指针变量
//int *p[10];
//p[0]~p[9] 都是一个 int *指针变量
//定义一个一维字符指针数组,并利用不定数量(不多于10)个字符串将其初始化,然后将各字符串输出。
//比如:
//输入
//asdfw uuio fff tyu
//
//输出为
//tyu
//fff
//uuio
//asdfw
//str[0]
//char str[10][100]--> char [100] --> char *
//int main(int argc, const char * argv[]) {
// char *ps[10]={NULL};
// char str[10][100]={};//str[0] &str[0][0] char *
// int cnt=0;
// for (int i=0; i<10; i++) {
// ps[i]= str[i];
// scanf("%s",ps[i]);
// cnt++;
// if (getchar()=='\n') {
// break;
// }
// }
// for (int i=0; i<cnt; i++) {
// printf("%s\n", ps[i]);
// }
// return 0;
//}
#include <stdlib.h>
//int main(int argc,const char *argv[])
//{
// char *ps[10]={NULL};
// int cnt=0;
// for (int i=0; i<10; i++) {
// ps[i]=(char *)malloc(100*sizeof(char));
// if (!ps[i]) {
// return -1;
// }
// scanf("%s", ps[i]);
// cnt ++;
// if (getchar()=='\n') {
// break;
// }
// }
// for (int i=0; i<cnt; i++) {
// printf("%s\n", ps[i]);
// free(ps[i]);
// ps[i]=NULL;
// }
// return 0;
//}
//利用指针数组求二维数组元素的和
//int sum(int *p[], int len1, int len2)
//{
// int sum=0;
// for (int i=0; i<len1; i++) {
// for (int j=0; j<len2; j++) {
// //sum+=p[i][j];// p[i][j] --> *((*(p+i))+j)
// //sum+=(*(p+i))[j];
// sum += *((*(p+i))+j);
// }
// }
// return sum;
//}
//
//int main(int argc,const char *argv[])
//{
// int a[3][2]={1,2,3,4,5,6};
//
// int *p[3]={NULL};
// for (int i=0; i<3; i++) {
// p[i]=a[i];
// }
// printf("sum = %d\n", sum(p,3,2));
//
// return 0;
//}
//数组的指针(数组指针)
//数组类型的指针,本质是指针变量,数据类型是数组类型的
//int (*p)[3]; --> int (*)[3] int [3]
//p是一个向有三个元素的一维数组的指针
//&a[0]
//int a[5][4]<==> int (*&a[5])[4] --> int (*)[4]
//a[0]
//int a[5][4]--> int a[0][4] --> int [4] --> int *
//a
//int a[5][4] --> int [5][4] --> int (*)[4]
//&a
//int a[5][4] <==> int (*&a)[5][4] --> int (*)[5][4]
//&a[0][0] --> int *
//int main(int argc,const char *argv[])
//{
// //printf("size = %ld\n", sizeof(int [5]));
//
// int a[5][4]={};
// int (*p)[4]=a;//int (*)[4] int *
//
// printf("%p\n",p);
// p++;
// printf("%p\n",p);
// p++;
// printf("%p\n",p);
//
// return 0;
//}
//传递一维数组的指针
int sum1(
int(*p)[
2],
int len)
// *(int (*p)[2]) --> int [2]
{
int sum=
0;
for (
int i=
0; i<len; i++
) {
for (
int j=
0; j<
2; j++
) {
//sum+=p[i][j];
//sum+= (*(p+i))[j];
sum+=*(*(p+i)+
j);
}
}
return sum;
}
//传递二维数组的指针
int sum2(
int (*p)[
3][
2])
//*p int [3][2] --> int (*)[2]
{
int sum=
0;
for (
int i=
0; i<
3; i++
) {
for (
int j=
0; j<
2; j++
) {
//sum+= (*p)[i][j];
sum+= *(*(*p+i)+
j);
}
}
return sum;
}
//int main(int argc, const char *argv[])
//{
// int a[3][2]={1,2,3,4,5,6};
// //printf("sum = %d\n", sum1(a,3));
// printf("sum = %d\n", sum2(&a));
//
// return 0;
//}
//函数的指针
//函数类型的指针
//int (*pfunc)(int , int)=add; ---> int (*)(int,int)
//int (*pfunc)(void);
//void (*pfunc)(void);
//函数名是函数指针类型的
int add(
int a,
int b)
{
return a+
b;
}
int sub(
int a,
int b)
{
return a-
b;
}
//int main(int argc, const char *argv[])
//{
// //printf("add = %p\n", add);
// //printf("sum = %d\n", add(3, 5));
// int (*pfunc)(int , int)=add;
//
// printf("sum = %d\n", pfunc(3,5));
//
// pfunc = sub;
//
// printf("sub = %d\n", pfunc(9,5));
//
// return 0;
//}
//函数指针数组
//int (*p[5])(int , int);
void run(
void)
{
printf("狗在奔跑\n");
}
void eat(
void)
{
printf("狗在肯骨头\n");
}
void sleeping(
void)
{
printf("狗在睡觉\n");
}
void bark(
void)
{
printf("狗在咬人\n");
}
void tail(
void)
{
printf("狗在摇尾巴\n");
}
#include <
string.h>
//int main(int argc, const char *argv[])
//{
// char order[20]={};
// scanf("%s", order);
// char *strAction[5]={"run","eat","sleeping","bark","tail"};
// void (*dogAction[5])(void)={run,eat,sleeping,bark,tail};
//
// for (int i=0; i<5; i++) {
// if (strcmp(order, strAction[i])==0) {
// dogAction[i]();
// }
// }
// return 0;
//}
//回调函数
void print_hello(
void)
{
printf("hello\n");
}
void print_world(
void)
{
printf("world\n");
}
void print_welcome(
void)
{
printf("welcome\n");
}
void print(
void(*pfunc)(
void),
int cnt)
{
for (
int i=
0; i<cnt; i++
) {
pfunc();
}
}
//int main(int argc,const char *argv[])
//{
// print(print_hello, 5);
// print(print_welcome, 4);
// print(print_world, 5);
//
// return 0;
//}
//定义一个一维字符指针数组,并利用不定长字符串将其初始化,最后一段字符串以‘@’结尾,然后将各字符串输出.
//比如:
//输入
//asdfw
//dffweff@
//输出为
//asdfw
//dffweff
//
//输入
//sgfge
//asdfwwr
//wwdfaf@
//输出为
//sgfge
//asdfwwr
//wwdfaf
unsigned long my_strlen(
char *
str)
{
int i=
0;
while (str[i]) {
i++
;
}
return i;
}
//int main(int argc,const char *argv[])
//{
// //printf("len = %lu\n", my_strlen("hello"));
//
// char *ps[10]={NULL};
// int cnt=0;
// for (int i=0; i<10; i++) {
// ps[i]=(char *)malloc(100*sizeof(char));
// if (!ps[i]) {
// return -1;
// }
// scanf("%s", ps[i]);
// int len = (int)my_strlen(ps[i]);
// if (ps[i][len-1]=='@') {
// ps[i][len-1]='\0';
// }
// cnt++;
// if (getchar()=='\n') {
// break;
// }
// }
//
// for (int i=0; i<cnt; i++) {
// printf("%s\n", ps[i]);
// free(ps[i]);
// ps[i]=NULL;
// }
// return 0;
//}
//指针函数
//函数的返回为指针类型的函数
//#include <string.h>
//
//int main(int argc,const char *argv[])
//{
// //char *strcpy(char *dst, const char *src);
// return 0;
//}
//二级指针(指向指针的指针)
//int a=100;
//int *p = &a;
//int **q = &p;
//int main(int argc,const char *argv[])
//{
// int a=100;
// int *p = &a;
// int **q = &p;
//
// printf("&a = %p\n", &a);
// printf("&a = %p\n", p);
// printf("&a = %p\n", *q);
//
// printf("a = %d\n", *p);
// printf("a = %d\n", a);
// printf("a = %d\n", **q);
//
// return 0;
//}
//利用二级指针交换两个变量的值
void swap(
int **a,
int **
b)
{
int temp = **
a;
**a = **
b;
**b =
temp;
}
int main(
int argc,
const char **
argv)
{
int a=
10, b=
20;
int *pa= &
a;
int *pb= &
b;
swap(&pa, &
pb);
printf("a = %d b = %d\n", a, b);
return 0;
}
转载于:https://www.cnblogs.com/0515offer/p/4552147.html
转载请注明原文地址: https://win8.8miu.com/read-1541359.html