指针回去一定要复习,很难,最重要
回去多做题
研究以下代码
维数组中*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();
}
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转大写
图解二维数组 | 实验
a+1、&a+1、(a+1)和(*(&a+1))的区别
转载自CSDN
首先,公布一下结果:
感人的总结就是:&a是数组首地址,a是数组首元素的地址.
a+1:就是数组首地址加上一个元素所占的地址大小,这里int是4个字节,所以加上1x4.
&a+1:代表的是加上整个数组的大小,这里数组尺寸是3,所以+1代表的是地址加上3x4.
*(a+1):代表的是数组第一个元素的!!!值!!!不再是元素的地址,这里就是9999.
*(&a+1):将&a+1地址取出来.
:&a+1地址的前一个元素的地址,这个地址中的元素!!!值!!!取出来!
下面这个图可以帮助理解这个问题:
总结
还是开头那句话,指针多做题