服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 从头学习C语言之指针和数组

从头学习C语言之指针和数组

2022-09-06 12:23极致猎手 C/C++

这篇文章主要为大家详细介绍了C语言之指针和数组,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

指针和数组:

?
1
2
3
数组名其实是数组第一个元素的地址。
%p用来打印地址,为十六进制
&:取址操作符

如果用一个指针指向数组,应该怎么做呢?

  • char *p;
  • p=a;//语句1
  • p=&a[0];//语句2

指针的运算:

  • 当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于只想距离指针所在位置向前或向后第n个元素。
  • 对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法。
  • 需要郑重强调的是:p+1并不是简单的将地址加1,二十只想数组的下一个元素。

linux命令:12s/a/b/g:把第十二行的所有a替换为b

示例:

例一:

从标准输入流读取字符需要取址操作符(scanf),并且用&来址

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
 int main()
 {
     int a;
     int *p=&a;
     
     printf("请输入一个整数:");
    scanf("%d",&a);
 
    printf("a=%d\n",a);                             
                                                                              
    printf("请重新输入一个整数");
   scanf("%d",p);                           
    printf("a=%d\n",a);
                         
                                        
 
  return 0;                                                       

例二:

得出数组名是一个地址信息

?
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
 int main()
 {
   char str[120];
   printf("请输入鱼C的域名:");
   scanf("%s",str);
 
   printf("鱼C工作室的域名是:%s\n",str);
 
  return 0;
}

例三:

得出数组名其实是数组第一个元素的地址!

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  #include<stdio.h>
 int main()
  {
    char str[120];
    printf("请输入鱼C的域名:");
    scanf("%s",str);
 
  //printf("鱼C工作室的域名是:%s\n",str);
 
 printf("str的地址是:%p\n",str);
   printf("str的地址是:%p\n",&str[0]);
 
  return 0;
}

例四:

得出数组中的元素地址依次排列,元素空间相同按类型所占字节数排列

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
 int main()
 {
   char a[]="fishc";
   int b[5]={1,2,3,4,5};
   float c[5]={1.1,2.2,3.3,4.4,5.5};
   double d[5]={1.1,2.2,3.3,4.4,5.5};                
                                     
  printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
 printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
  printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);                   
 printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);
                                        
  return 0;           
}

例五:

得出数组中的元素地址依次排列,元素空间相同按类型所占字节数排列

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
 int main()
 {
   char a[]="fishc";                                                           
  int b[5]={1,2,3,4,5};
   float c[5]={1.1,2.2,3.3,4.4,5.5};
   double d[5]={1.1,2.2,3.3,4.4,5.5};
 
  int *p=b;
  printf("*p=%d,*(p+1)=%d,*(p+2)=%d\n",*p,*(p+1),*(p+2));
  printf("*b=%d,*(b+1)=%d,*(b+2)=%d\n",*b,*(b+1),*(b+2));
 
  printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
 printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
  printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);
  printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);
 
return 0;
}

例六:指针变量直接定义并赋值字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
 #include<string.h>
 int main()
 {
   char *str="i love fishc.com!";
   int i,length;
  length=strlen(str);
   for(i=0;i<length;i++)
   {
    printf("%c",str[i]);                                                    
  }
  printf("\n");
 
 
return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!  

原文链接:https://blog.csdn.net/HICKER_BOY/article/details/122693794

延伸 · 阅读

精彩推荐