本文概述
- C中的增量指针
- C中的递减指针
- C指针加法
- C指针减法
- 带有指针的非法算术
- C语言中的函数指针
- 指向C中函数数组的指针
- 增量
- 减量
- 加成
- 减法
- 比较方式
我们可以通过对指针使用增量操作来遍历数组,该操作将不断指向数组的每个元素,对该数组执行一些操作,然后在循环中更新自身。
下面给出增加指针的规则:
new_address= current_address + i * size_of(data type)
i是指针增加的数字。
32位
对于32位int变量,它将增加2个字节。
64位
对于64位int变量,它将增加4个字节。
让我们看一下在64位体系结构上递增指针变量的示例。
#include<
stdio.h>
int main(){
int number=50;
int *p;
//pointer to int
p=&number;
//stores the address of number variable
printf("Address of p variable is %u \n", p);
p=p+1;
printf("After increment: Address of p variable is %u \n", p);
// in our case, p will get incremented by 4 bytes.
return 0;
}
输出量
Address of p variable is 3214864300
After increment: Address of p variable is 3214864304
使用指针遍历数组
#include<
stdio.h>
void main ()
{
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
int i;
printf("printing array elements...\n");
for(i = 0;
i<
5;
i++)
{
printf("%d", *(p+i));
}
}
输出量
printing array elements...
12345
C中的递减指针像递增一样,我们可以递减指针变量。如果我们递减一个指针,它将开始指向先前的位置。递减指针的公式如下:
new_address= current_address - i * size_of(data type)
32位
对于32位int变量,它将减少2个字节。
64位
对于64位int变量,它将减少4个字节。
让我们看一下在64位OS上递减指针变量的示例。
#include <
stdio.h>
void main(){
int number=50;
int *p;
//pointer to int
p=&number;
//stores the address of number variable
printf("Address of p variable is %u \n", p);
p=p-1;
printf("After decrement: Address of p variable is %u \n", p);
// P will now point to the immidiate previous location.
}
输出量
Address of p variable is 3214864300
After decrement: Address of p variable is 3214864296
C指针加法我们可以向指针变量添加一个值。给指针增加值的公式如下:
new_address= current_address + (number * size_of(data type))
32位
对于32位int变量,它将加上2 *数字。
64位
对于64位int变量,它将加上4 *数字。
让我们看一下在64位体系结构上向指针变量添加值的示例。
#include<
stdio.h>
int main(){
int number=50;
int *p;
//pointer to int
p=&number;
//stores the address of number variable
printf("Address of p variable is %u \n", p);
p=p+3;
//adding 3 to pointer variable
printf("After adding 3: Address of p variable is %u \n", p);
return 0;
}
输出量
Address of p variable is 3214864300
After adding 3: Address of p variable is 3214864312
如你所见,p的地址是3214864300。但是在将3与p变量相加后,它的值为3214864312,即4 * 3 = 12的增量。因为我们使用的是64位体系结构,所以它增加了12。但是如果我们使用的是32位体系结构,则它只增加了6,即2 * 3 = 6。由于整数值在32位OS中占用2字节内存。
C指针减法像指针加法一样,我们可以从指针变量中减去一个值。从指针中减去任何数字将得到一个地址。从指针变量减去值的公式如下:
new_address= current_address - (number * size_of(data type))
32位
对于32位int变量,它将减去2 *数字。
64位
对于64位int变量,它将减去4 *数字。
让我们看一下在64位体系结构上从指针变量中减去值的示例。
#include<
stdio.h>
int main(){
int number=50;
int *p;
//pointer to int
p=&number;
//stores the address of number variable
printf("Address of p variable is %u \n", p);
p=p-3;
//subtracting 3 from pointer variable
printf("After subtracting 3: Address of p variable is %u \n", p);
return 0;
}
输出量
Address of p variable is 3214864300
After subtracting 3: Address of p variable is 3214864288
你可以从指针变量中减去3后看到,它比先前的地址值小12(4 * 3)。
但是,除了减去数字以外,我们还可以从另一个地址(指针)中减去一个地址。这将产生一个数字。这将不是一个简单的算术运算,但是它将遵循以下规则。
如果两个指针的类型相同,
Address2 - Address1 = (Subtraction of two addresses)/size of data type which pointer points
考虑以下示例,从另一个指针中减去一个指针。
#include<
stdio.h>
void main ()
{
int i = 100;
int *p = &i;
int *temp;
temp = p;
p = p + 3;
printf("Pointer Subtraction: %d - %d = %d", p, temp, p-temp);
}
输出量
Pointer Subtraction: 1030585080 - 1030585068 = 3
带有指针的非法算术无法对指针执行各种操作。由于指针存储地址,因此我们必须忽略可能导致非法地址的操作,例如加法和乘法。下面列出了此类操作。
- 地址地址=非法
- 地址*地址=非法
- 地址%20 %% 20地址%20 =%20非法
- 地址/地址=非法
- 地址
- 地址^地址=非法
- 地址地址=非法
- ?地址=非法
#include<
stdio.h>
int addition ();
int main ()
{
int result;
int (*ptr)();
ptr = &addition;
result = (*ptr)();
printf("The sum is %d", result);
}
int addition()
{
int a, b;
printf("Enter two numbers?");
scanf("%d %d", &
a, &
b);
return a+b;
}
输出量
Enter two numbers?10 15
The sum is 25
指向C中函数数组的指针要了解功能数组的概念,我们必须了解功能数组。基本上,函数数组是包含函数地址的数组。换句话说,指向函数数组的指针是指向包含函数指针的数组的指针。考虑以下示例。
#include<
stdio.h>
int show();
int showadd(int);
int (*arr[3])();
int (*(*ptr)[3])();
int main ()
{
int result1;
arr[0] = show;
arr[1] = showadd;
ptr = &arr;
result1 = (**ptr)();
printf("printing the value returned by show : %d", result1);
(*(*ptr+1))(result1);
}
int show()
{
int a = 65;
return a++;
}
int showadd(int b)
{
printf("\nAdding 90 to the value returned by show: %d", b+90);
}
【c语言指针运算】输出量
printing the value returned by show : 65
Adding 90 to the value returned by show: 155