指针(1)

本文详细介绍了C语言中的字符指针,包括如何存储和打印字符及字符串的地址。接着讨论了数组指针的概念,用于表示二维数组,并提供了打印二维数组的示例。最后,解释了指针数组,即存储指针的数组,可以用来组织多个数据序列。通过代码实例,阐述了各种指针类型的用法和区别。
摘要由CSDN通过智能技术生成

全文讲解都在注释


一、字符指针

  1. 代码讲解:

int main()
{
    char ch = 'a';
    char* pc = &ch;
//pc是指针变量,存放的是'a'的地址
    return 0;
}
int main()
{
    const char* p = "hello world";//
这里是把字符串首元素'h'的地址放进p
    //因为地址直接放入指针时,"hello world"是常量字符串,不能修改!!!
    //const的作用是将确保常量字符串遭到修改时会进行报错
    printf("%s\n", p);
//%s打印字符串
    return 0;
}
int main()
{
    char arr[] = "abcdef";
    char* p = arr;//p中存放arr数组的首元素地址
    return 0;
}
  1. 扩展:

int main()
{
    char str1[] = "hello bit.";
    char str2[] = "hello bit.";    
    //虽然内容相同,但两个数组本质上是两个空间
    const char *str3 = "hello bit.";
    const char *str4 = "hello bit.";
    //表面上指向的空间不同,但因为都是h的地址,电脑为了方便处理,并不会取两个不同地址的h
    if(str1 ==str2)
        printf("str1 and str2 are same\n");
//错
    else
        printf("str1 and str2 are not same\n");
//对
       
    if(str3 ==str4)
        printf("str3 and str4 are same\n");
//对
    else
        printf("str3 and str4 are not same\n");
//错
       
    return 0;
}

二、数组指针

  1. 代码讲解:

int (*pa)[10] = &arr;//&arr是数组的地址,不是数组首元素的地址
//arr代表的是数组首元素的地址
//如果写成int* pa[10] = &arr 会理解成一个十元素的数组,每个元素是整形指针(指针数组) 
int (*p)[10];
//p是一个指针变量,指向一个大小为十个整型的数组
//因为[]的优先级要高于*号,所以必须加上()来保证p先和*结合,形成指针
  1. 使用讲解:

可用于打印二维数组

void print_arr1(int arr[3][5], int row, int col)
{
    int i = 0;
    for(i=0; i<row; i++)
    { 
        for(j=0; j<col; j++)
        {
            printf("%d",arr[i][j]);
        }
    }
}
int main()
{
    int arr[3][5] = {1,2,3,4,5,6,7,8,9,10};
    print_arr1(arr, 3, 5);
}

三、指针数组

(存放指针的数组)

代码讲解:

int main()
{
    char* arr[] = {"abcde","haha","qwer"};
    //arr中储存的是分别是a的地址,h的地址,q的地址
    int i = 0;
    for(i = 0;i < 3;i++)
    {
        printf("%s",arr[i]);
    }
    return 0;
}

代码使用:

int main()
{
    int arr1[] = {1,2,3,4,5};
    int arr2[] = {2,3,4,5,6};
    int arr3[] = {3,4,5,6,7};
    int* arr[] = {arr1;arr2;arr3};
    int i = 0;
    for(i = 0;i < 3;i++)
    {
        int j = 0;
        for(j = 0;j < 5;j++)
        {
        printf("%d",arr[i][j]);//打印成一个二维数组,arr[i] == *(arr + i)
        printf("%d",*(arr[i] + j));//两种打印方式意义相同
        }
        printf("\n");
    }
    return 0 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值