24.08.12

day10

1.指针数组

    是一个数组,数组元素为一个一个的指针。


一般形式:
        存储类型  数据类型  *数组名[元素个数];

        
eg:
        int a = 10, b = 20, c = 30int *p[3] = {&a, &b, &c};

		p[0] == &a
        *p[0]  ==  a == 10
       **( p + 1)
       
                 
       char *p[3] = {"hello world", "xxxxxxxxxxxx", "123456"};
练习
1.实现字符串排序输出
	char str[4][32] = {"hello world", "xxxxxxxxxx", "123", "abcd"};
    char *p[4] = {str[0], str[1], str[2], str[3]};

    
    int i, j;
    for(i = 0; i < 4 - 1; i++)
    {   
        for(j = 0; j < 4 - 1 - i; j++)
        {
            if( strlen(p[j]) >  strlen(p[j+1]))
            {
    
                char *temp;
                temp = p[j];
                p[j] = p[j + 1]; 
                p[j + 1] = temp; 
    
                /*
                char temp[32] = {0};
                strcpy(temp, p[j]);
                strcpy(p[j], p[j + 1]);
                strcpy(p[j + 1], temp);
                */

            }
        }
    }   


    for(i = 0; i < 4; i++)
    {   
        puts(p[i]);
    }   

指针数组与二维数组的关系

int a[3][4] = {1,2,3,4,
               5,6,7,8,
               9,10,11,12};


int *p[3] = {a[0], a[1], a[2]};
练习
1.实现累加求和
int a[3][4] = {1,2,3,4,
               5,6,7,8,
               9,10,11,12};


int *p[3] = {a[0], a[1], a[2]};

int i,j, sum= 0;
for(i = 0; i < 3; i++)
{
    for(j = 0; j < 4; j++)
    {
        sum += p[i][j];
    }
}

2.特殊的指针

1.野指针:指向不明确的指针,一用就段错误    
    int *p;
    
    
2.空指针:执行零地址(NULL)的指针,一用就段错误
    int *p = NULLif(p != NULL)
    {
        
    }



3.二级指针(多级指针)
    
    指针的指针
    
    int a = 10int *p = &a;
    int **q = &p;      


4.空类型指针(万能指针):能够指向任意类型的地址
注意:使用空类型指针操作空间时,需要强制类型转换为对用指针类型。
    
    void *p;
    
    int a = 10;
    void *p = &a;
	printf("%d\n", *(int *)p);

    double pi = 3.14;
    p = &pi;
    printf("%f\n", *(double *)p);  
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值