10.C语言指针3案列代码

10.C语言指针3案列代码

#import 
void list(int * p,int lenth);
void mylist(int (* p)[3],int lenth);
void yourlist(int (* p)[3][3],int lenth);
//int * p :表示 &arr[0]  &arr[1]  &arr[2]
//int (* p)[3]:P++;  arr[0][0]/arr[0][1]/arr[0][2] ;arr[1][0-2];arr[2][0-2]
int fun(int,int,int);
int main(int argc, const char * argv[])
{

    @autoreleasepool {
//        int a,b,c,d,e;
//        int * p [10];
//        //p离【】最近,所以是数组,而数组中有个10长度,就有10个指针变量。
//        //数组元素为指针的数组。
//        p[0]=&a;
//        p[1]=&b;
//        p[2]=&c;
//        p[3]=&d;
//        p[4]=&e;
//        *p[0]=8;
//        printf("%d\n",*p[0]);
//        printf("%lu\n",sizeof(int * [10]));
//        printf("%lu\n",sizeof(p[0]));
        
        
//        int arr[10];
//        int (* p) [10];
//        //它是一个指针,指向一个数组的指针。
//        p=&arr;
//        //arr:表示数组第一个元素的第一个字节的地址 ,假设:101
//        //&arr:表示数组的第一个字节的地址。假设:101
//        //地址相同、类型不同
//        printf("%p\n",p);
//        p++;
//        printf("%p\n",p);
        
        
        //    练习:
        //    1》int (*p)[10];
        //  int **q;
        //  int * x[10];
        //  p++;  是加多少?40个字节
        //  q++; 是加多少?8个字节
        //  x++;  是加多少?x表示的十数组,不可以自加;

        //  p++;  是加多少?40
//        int a[10];
//        int (*p)[10]=&a;
//        printf("%d\n",p);//输出数组的第一个字节的地址;
//        p++;
//        printf("%d\n",p);//输出第二个数组的第一个字节数的地址,所以是家40;
        
        //  q++; 是加多少?8个字节。
//        int **q;
//        int *p;
//        int a=1,b=2;
//        p=&a;
//        q=&p;
//        *q=&b;
//        printf("%d\n",q);//输出a的首地址;
//        printf("%d\n",*p);//指针p储存了a的地址,q存储了指针p的地址,现在用*q修改了指针p的值,所以p存储了b得地址,所以p指向了b,所以*p等于b;
//        q++;
//        printf("%d\n",q);//指针q加一指,加了一个指针;
        
        
       // 例子:
        /* int  *n;
         int a[2];
         n=a;
         printf("%p\n",n);
         n++;
         printf("%p\n",n); //加了4个字节,n相当于加了一个整型数组元素也就是4个字节
         int arr[10];
         int (*p)[10];
         p=&arr;
         printf("%d\n",p);
         p++;
         printf("%d\n",p);//加了40个字节   p相当于加了一个数组
         */
        
//        int a=0;
//        int b=0;
//        int * p;
//        p = &a; //p指向变量a
//        * p = 3;//*p=a所以a=3;b=0;
//        printf("%d %d\n",a,b);
        
        
//        int * * q;
//        q = &p;  //q指向指针p
//        * q =&b;
//        * p = 5;
//        printf("%d %d\n",a,b);
     //   例子:
    /*  int a=0;
        int b=0;
        int * p;
        int * * q;
        q = &p;  //q指向指针p
        * q =&b;
        * p = 5;
        printf("%d %d\n",a,b);
     解释  因为a=b=0;
           q=&p;==》q指向了p; *q=&b;==》p=&b  因为*p=5==》b=5;a=0;
     
    */
        
        
        
//        int ar[5] = {1,2,3,4,5};
//        int arr[3][3] = {1,2,3,4,5,6,7,8,9};
//        list(ar, 5);
//        printf("\n");
//        void (* p) (int (* p)[3],int lenth)=mylist;
//        p(arr, 3);
//        int (* q)(int,int,int)=fun;
//        int a = malloc(4);
//        a=4;
//        printf("%d\n",a);
//        free(a);
        char * ch = malloc(100);
//        ch = "hello";
        strcpy(ch, "hello world");
        free(ch);
        printf("%s\n",ch);
        
//        free(ch);
    }
    return 0;
}
void list(int * p,int lenth)
{
    for (int i=0; i

你可能感兴趣的:(10.C语言指针3案列代码)