指针高级
// // 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; }