指针回去一定要复习,很难,最重要
回去多做题

研究以下代码

维数组中*a和a都是地址

二维数组中*a和a都是地址

题目

c语言程序:输入一个连续的字符串,然后统计数字、小写字母、大写字母和其他字符的个数。

答案


main()
{

char str[100];
int i,n=0,wx=0,wd=0,c=0;
//n、wx、wd、c分别用来存储数字、小写字母、大写字母和字符的个数
printf("请输入无非空格和制表符的连续字符串: ");
scanf("%s",str);  
//以下循环用于统计各类字符的个数
for(i=0;i<100;i++)
{ 
    char ch = str[i];
    if(str[i]=='\0') 
        break;
    if(ch >= '0' && ch <= '9') 
        //isdigit()是判断是否为数字的函数
        n=n+1;
    else if(ch >= 'a' && ch <= 'z')  
        //islower()是判断是否为小写字母的函数
        wx++;
    else if(ch >= 'A' && ch <= 'Z')  
        //isupper()是判断是否为大写字母的函数
        wd++;
    else
        c++;  
}
//以下语句用于输出各项的值
printf("输入的第一个字符串为:%s\n",str);
printf("输入的数字的个数为:%d\n",n);
printf("输入的小写字母的个数为:%d\n",wx); 
printf("输入的大写字母的个数为:%d\n",wd);
printf("输入的其他字符的个数为:%d\n",c);
getchar();   

}

download_file (2).jpg

int *fun3(int *x,int *y);
void fun1(int x,int y);
void fun2(int *x,int *y);
//对于此类函数,先引用后定义时要加函数说明
main()
{
    int a=10,b=20,*p;
    printf("未交换前a=%d,b=%d\n",a,b);
    fun1(a,b);
    printf("调用函数fun1后a=%d,b=%d\n",a,b);

    fun2(&a,&b);
    printf("调用函数fun2后a=%d,b=%d\n",a,b);

    p=fun3(&a,&b);
    printf("调用函数fun3后得到的最大值为:%d",*p);
    getchar();
}


void fun1(int x,int y)  //调用此函数时,只将a和b的值传递给形参
{
    int  t;
    t=x;
    x=y;
    y=t; 
}  
void fun2(int *x,int *y)  
//调用此函数时,将a和b的地址传递给形参,这时x和y分别指向a和b
{
    int  t;
    t=*x;
    *x=*y;
    *y=t;
}    

a=10,b=20,调用fun1,fun2


strlwr转小写
strupr转大写

图解二维数组 | 实验

2024-08-22T06:50:52.png

2024-08-22T06:56:04.png

a+1、&a+1、(a+1)和(*(&a+1))的区别


转载自CSDN

首先,公布一下结果:
784635c757cfd67441eee05ab6b1e0ef.png

感人的总结就是:&a是数组首地址,a是数组首元素的地址.

a+1:就是数组首地址加上一个元素所占的地址大小,这里int是4个字节,所以加上1x4.
&a+1:代表的是加上整个数组的大小,这里数组尺寸是3,所以+1代表的是地址加上3x4.
*(a+1):代表的是数组第一个元素的!!!值!!!不再是元素的地址,这里就是9999.
*(&a+1):将&a+1地址取出来.
:&a+1地址的前一个元素的地址,这个地址中的元素!!!值!!!取出来!

下面这个图可以帮助理解这个问题:

原文:https://blog.csdn.net/zb121121/article/details/91349014

总结

还是开头那句话,指针多做题

最后修改:2024 年 08 月 22 日
如果觉得我的文章对你有用,请随意赞赏