//
// 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 *p[] ==int **p
//{
// 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;
}
转载于:https://www.cnblogs.com/0515offer/p/4551411.html
转载请注明原文地址: https://win8.8miu.com/read-1541815.html