指针笔记1

1.访问数组中的第N个元素时:a[n-1]或*(a+(n-1));如第二个a[1]或*(a+1);

2.数组指针 int (*parr)[n];能够指向长度为n的数组的指针parr;

   指针数组int *parr[n];包含n个含有int类型的指针的数组;

3.数组指针:

  •         让数组指针指向数组a——parr=&a;

        注意:如果写成parr=a;表示指向数组a的首地址,不是整个数组;

  • 通过数组指针访问数组中的各元素——*(*parr+1) 访问到了数组a的第二个元素;

        ——for(int i=0;i<n;i++) printf("%d",*(*parr+i)); 打印了数组所有元素;

        ——或者for(int i=0;i<n;i++) printf("%d",(*parr)[i] );

  •  用指针访问二维数组的各元素:可以把二维转化为一维再进行访问。

        例如:

int b[2][3]={ {10,20,30},{40 50 60}};//转化为一维数组;
int (*parr)[3]=b;//此处B为指向第一个长度为3的指针,所以不用加&,表示将b赋给数组指针parr
//如访问数组中第二行第三列时:
//*(*(parr+1)+2);
for(int i=0;i<2;i++){
    for(int j=0;j<3;j++)
        printf("%d ",*(*(parr+i)+j));
    printf("\n");
}

可以看出数组指针和数组名的共通之处,上述指针的输出就等于parr[i][j];

总结:一维数组名可看作一个普通指针,需要加&表示一个指针;而二位数组名可看作一个数组指针,指向的是一个数组,不需要用&。

4.指针与字符串常量:

      char *pstr='apple';此时指针pstr即可表示指向第一个字符a的内存地址。也可以表示指向该字符串的指针。

        so,根据两种的情况有不同的输出:

        printf("%c",*pstr);解引用出来的是字符格式,即为 a;

        printf("%s",pstr);打印字符串时,需要的是指向首字符的指针,而不是字符,因此不需要*。

        注意:因为指针pstr所指为字符串常量,所以不要用指针修改字符串内容,字符串内容不允许修改。此处可将其定义为常量指针:const char*pstr="apple"; 来表示不能修改指针指向地址内的内容。

5.指针与字符数组

        上面说到不能用指针来修改字符串常量,但是当使用字符数组时就可以对字符串内容进行修改了。举个栗子:

char str[]="apple";
*str=A;//将数组首地址的元素重新赋值为A;
printf("%s",str);

        此时结果就变为:Apple;

一个小例题:运用指针,将字符串中的小写字母转换为大写字母。

#include <stdio.h>
int main()
{
    char str[]="Tel:017No.88#";

    for(int i=0;i<sizeof(str);i++)
    {
        if(str[i]>='a'&&str[i]<='z'){
            *(str+i)-=32;
        }
    }
    printf("%s",str);
    return 0;
}

注意:*(str+i)指针从首地址移动,访问数组后面的每一个元素。

6.二维字符数组

 适用于储存多个字符串。

例题:输入三个字符串,按照字符串的长度以升序方式打印字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值