前言
这是我在这个网站整理的笔记,关注我,接下来还会持续更新。
作者:RodmaChen
一.介绍
1.关于地址
(1)C语言可以轻松访问内存位置并执行与内存相关的操作。
(2)内存地址以十六进制数给出。(十六进制:是一个以16为底的数字系统,它使用数字0到9和字母A到F(16个字符)代表一组四个二进制数字,其值可以从0到15。)
(3)它更容易阅读一个16位数字的8位十六进制数,用于32位内存,而不是尝试用二进制破译32位1和0。
2.什么是指针
(1)作用:轻松地处理内存位置,它是数组,字符串以及其他数据结构和算法的基础。
(2)指针是包含可变地址另一个变量。换句话说,它“指向”分配给变量的位置,并且可以间接访问该变量。
• 在将指针分配给有效位置之前,应将其初始化为NULL。
• 可以使用&符号为指针分配变量的地址。
• 要查看指针指向的内容,请再次使用*,如* p所示。在这种情况下,*被称为间接或取消引用运算符。该过程称为解引用。
列:
int j = 63;
int * p = NULL;
p =&j;
printf(“ j的地址是%x \ n”,&j);
printf(“ p包含地址%x \ n”,p);
printf(“ j的值为%d \ n”,j);
printf(“ p指向值%d \ n”,* p);
输出:
j的地址是ff3652cc
p包含地址ff3652cc
p 的值是63
p指向值63
二.指针和数组
使用指针,我们可以指向第一个元素,然后使用地址算法遍历数组:
+
用于向前移动内存位置
-
用于向后移动内存位置
列:
int a[5] = {22, 33, 44, 55, 66};
int *ptr = NULL;
int i;
ptr = a;
for (i = 0; i < 5; i++) {
printf("%d ", *(ptr + i));
}
数组名称充当指向数组第一个元素的指针。因此,语句ptr = a
可以认为是ptr =&a [0]
。
增量运算符
(ptr ++)
时,指针会增加4,因为指针指向一个int。
三.指针与函数
指针大大扩展了功能的可能性。我们不再局限于返回一个值。使用指针参数,您的函数可以更改实际数据,而不是数据副本。
指针交换功能事列:
void swap (int *num1, int *num2);
int main() {
int x = 25;
int y = 100;
printf("x is %d, y is %d\n", x, y);
swap(&x, &y);
printf("x is %d, y is %d\n", x, y);
return 0;
}
void swap (int *num1, int *num2) {
int temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
四.指针的算法
适用于指针的唯一有效算术运算是:
- 将整数加到指针
- 整数减指针
- 减去两个相同类型的指针
我们来举个列子:
int i = 11, *ip = &i;
double d = 2, *dp = &d;
char ch = 'a', *cp = &ch;
假设:i
,d
和ch
的地址分别是1000,2000,3000
,因此ip,dp
和cp
的地址是1000,2000,3000
。
整数的指针算术
指针表达 | 如何评估? |
---|---|
ip++ 要么 ++ip | ip++=> ip + 1=> 1004 + 1*4=>1008 |
ip = ip + 5 | ip=> ip + 5=> 1008 + 5*4=>1028 |
ip = ip - 2 | ip=> ip - 2=> 1028 - 2*4=>1020 |
ip-- 要么 --ip | ip=> ip + 2=> 1020 + 2*4=>1028 |
浮点指针算法
指针表达 | 如何评估? |
---|---|
dp + 1 | dp = dp + 1=> 2000 + 1*8=>2008 |
dp++ 要么 ++dp | dp++=> dp+1=> 2008+1*8=>2016 |
dp = dp + 5 | dp=> dp + 5=> 2016+5*8=>2056 |
dp-- 要么 --dp | dp=> dp - 1=> 2040-1*8=>2032 |
字符指针算法
指针表达 | 如何评估? |
---|---|
cp + 1 | cp = cp + 1=> 97 + 1*1=>98 |
cp++ 要么 ++cp | cp=> cp + 1=> 98 + 1*1=>99 |
cp = cp +5 | cp=> cp + 5=> 99 + 5*1=>104 |
cp = cp-2 | cp=> cp -2=> 104 - 2*1=>102 |
cp-- 要么 --cp | cp=> cp -1=> 102 - 1*1=>101 |
当我们通过增加或减少数字来递增和递减指针变量时,指针变量仍不指向有效的存储位置。因此,当我们以这种方式移动指针时,我们必须始终特别注意。通常情况下,我们对数组使用指针算法,因为数组的元素排列在连续的内存位置中。
作者:RodmaChen
本人博客:https://blog.csdn.net/weixin_46654114
qq:1342709867
转载说明:务必联系我,注明来源,附带本人博客连接。谢谢配合。
请给我点个赞鼓励我吧