LinuxC学习日常——指针
来源:互联网 发布:开机显示便签损坏 知乎 编辑:程序博客网 时间:2024/06/05 03:17
1、指针变量的定义
int a;
int *p = &a;
* 表示这个变量是一个指针,int代表这个指针所指向的地址中保存的数据的类型,也可以是char、double等类型,但必须和指针所指向的地址中保存的数据类型一致。
指针变量中保存的是地址,所以必须将a的地址赋值给指针变量p。
2、指针变量的大小
指针变量的大小只与编译器的位数有关,由于指针内部存的是地址,32为情况下地址都是32位的,所以在32位的编译器下指针都是4个字节,在64位编译器下则是8个字节。
3、指针变量的取值
在变量定义时 * 号代表该变量为指针变量,在使用指针变量时*号代表取指针所指向的那块内存的值也就是说 *+地址 表示指针指向的那块内存的值。
#include <stdio.h>
int main(){int a = 10;int b = 20;int *pa = &a;int *pb = &b;// 通过 pa 与 pb 交换 a 与 b 的值int tmp = *pa;*pa = *pb;*pb = tmp;return 0;}
4、数组指针
指向数组的指针叫数组指针,数组名代表数组首个元素的地址
如:int a[5];
a = &a[0],&a是数组的地址要和数组首个元素的地址区分开。
数组名代表数组首个元素的地址,在某些场合可以当指针使用。
数组指针与数组的差异1:数组指针不能代替数组名求数组长度。(指针在32位编译器下永远是4个字节)
数组指针与数组的差异2:数组是一个常量不能改变。(不能出现数组名自加或者自减的情况)
#include <stdio.h>//指针方式逆序数组int main(){int a[10] = {1,2,3,4,5,6,7,8,9,10};int *p1 = a; // 指向数组的第一个元素int *p2 = a + sizeof(a)/sizeof(a[0]) - 1;while (p1 < p2){int tmp = *p1;*(p1++) = *p2;*(p2--) = tmp;}int i;for (i = 0; i < 10; i++){printf ("%4d", a[i]);}printf ("\n");return 0;}
5、字符串指针
字符串指针的使用方法和数组指针差不多,字符串指针是用来指向字符串数组或者字符串常量的。
#include <stdio.h>#include <string.h>int main1(){char ch[] = "hello";char *pch = ch;printf ("%s\n",pch);int i;for (i = 0; i < strlen(ch); i++){printf ("%c", *(pch+i));}putchar ('\n');puts(pch);char str[10];char *pstr = str;scanf ("%s", pstr);puts(str);return 0;}典型错误1:将一个字符串写到一个没有初始化的指针位置即野指针。
典型错误2:用指针去修改一个字符串常量的值。
一个字符串常量可一代表这个字符串的首地址,可以用 char* 类型的指针指向它。
#include <stdio.h>//句子逆序#include <string.h>int main(){// char *p = "I am from shanghai";// char str[] = "I am from shanghai";char str[] = "you are from shanghai";// 将整个字符串逆序char *p1 = str;char *p2 = str + strlen(str) - 1;char *p3 = NULL; // 用于将单词逆序char tmp;while (p1 < p2){tmp = *p1;*(p1++) = *p2;*(p2--) = tmp;}puts(str);// 再将每一个单词进行逆序,单词通过空格去找p1 = str;p2 = str;while(*p2) // p2找到字符串结束为止{if (*p2 == ' ') // 找到一个单词,要将前面的单词进行逆序{p3 = p2 - 1;while (p1 < p3){tmp = *p1;*(p1++) = *p3;*(p3--) = tmp;}p1 = p2 + 1;}p2++;}p3 = p2 - 1;while (p1 < p3){tmp = *p1;*(p1++) = *p3;*(p3--) = tmp;}puts(str);return 0;}
6、指针数组
一个数组,数组内的每个元素都是指针。
7、二维数组指针
int a[3][5]
int (*p)[5] = a;
阅读全文
0 0
- LinuxC学习日常——指针
- LinuxC学习日常——语句
- LinuxC学习日常——函数
- LinuxC学习日常——自习(1)
- LinuxC学习日常——复合类型及关键字
- LinuxC编程一站式学习——堆栈
- LinuxC编程实战学习——第六章文件操作
- 学习笔记:linuxc第七章—进程控制 上篇
- 学习笔记:linuxc第七章—进程控制 下篇
- LinuxC学习之函数指针与指针函数的简单区分与应用
- Linuxc语言复习篇指针(-)
- linuxc编程学习
- LinuxC学习笔记
- LinuxC高级编程——进程
- LinuxC高级编程——线程
- linuxC系统编程——进程管理
- linuxC系统编程——线程管理
- linuxC系统编程——socket编程
- c10k问题
- 微信小程序】布局插件:wxgrid
- Leetcode Palindrome Partitioning II
- 3000Fps 论文实现 部分解析--Wt的回归
- redis事务的简单了解
- LinuxC学习日常——指针
- 计算机视觉之基于聚类的分割方法(2)
- Python:数据流中的中位数
- 初识NuGet及快速安装使用
- mysql数据库及表编码格式大纲
- 关于web的一些总结
- arm 学习笔记2
- 算法初探-动态规划(Dynamic Programming)
- 分段管理机制(段描述符,描述符表,段选择符)