📜  带有示例的C中的指针表达式

📅  最后修改于: 2021-05-25 18:52:03             🧑  作者: Mango

先决条件: C语言中的指针

指针用于指向变量的位置。通过在指针名称之前加星号(*)来声明指针。
句法:

datatype *pointer_name;

当需要使用变量的位置初始化指针时,请在变量名称前使用&符(&)
例子:

// Declaration of integer variable
int var=10;
  
// Initialization of pointer variable
int *pointer=&var;

”号(&)用于获取变量的地址。我们可以在任何标识符前面加上一个&符号来直接找到其位置。
例子:

// This code prints the address of x
#include 
  
int main()
{
    int x = 10;
  
    // Prints address of x
    printf(
        "Address of variable x = %p", &x);
  
    return 0;
}
输出:
Address of variable x = 0x7fff3b690fd4


C支持一组丰富的内置运算,例如算术运算,关系运算,赋值运算,条件运算等,它们可以对标识符执行。像任何其他变量一样,这些操作也可以在指针变量上执行

算术运算符

我们可以使用算术运算运算符对指针变量执行算术运算。我们可以使用指向该整数变量的指针添加整数或减去整数。下表显示了可以对指针变量执行的算术运算运算符:

例子:

*ptr1 + *ptr2
*ptr1 * *ptr2
*ptr1 + *ptr2 - *ptr3

我们还可以使用整数直接执行算术表达式。让我们看一下下面给出的示例,其中p1和p2是指针。

p1+10, p2-5, p1-p2+10, p1/2 

下图显示了表达式/运算符与指针的精确协作方式。

如图所示,指针“ pa”和“ pb”分别指向整数变量“ a”和“ b” 。直接在整数变量和指针变量之间执行加法,结果分别存储在整数变量“ c”和“ x”中。两种结果是相同的。

让我们用给定的代码更好地理解指针算术表达式:

// Program showing pointer expressions
// during Arithmetic Operations
#include 
  
int main()
{
    // Integer variables
    int a = 20, b = 10;
  
    // Variables for storing arithmetic
    // operations solution
    int add, sub, div, mul, mod;
  
    // Pointer variables for variables
    // a and b
    int *ptr_a, *ptr_b;
  
    // Initialization of pointers
    ptr_a = &a;
    ptr_b = &b;
  
    // Performing arithmetic Operations
    // on pointers
    add = *ptr_a + *ptr_b;
    sub = *ptr_a - *ptr_b;
    mul = *ptr_a * *ptr_b;
    div = *ptr_a / *ptr_b;
    mod = *ptr_a % *ptr_b;
  
    // Printing values
    printf("Addition = %d\n", add);
    printf("Subtraction = %d\n", sub);
    printf("Multiplication = %d\n", mul);
    printf("Division = %d\n", div);
    printf("Modulo = %d\n", mod);
    return 0;
}
输出:
Addition = 30
Subtraction = 10
Multiplication = 200
Division = 2
Modulo = 0

注意:执行除法时,请确保在指针的“ /”和“ *”之间放置空格,因为它们在一起将构成多行注释(’/ *’)。
例子:

Incorrect:  *ptr_a/*ptr_b;
 Correct:    *ptr_a / *ptr_b; 
 Correct:    (*ptr_a)/(*ptr_b);

关系运算符

关系运算通常用于比较变量的值,以此为基础我们可以做出决策。给定的表显示了可以对指针变量执行的关系运算符。

例子:

*ptr1 > *ptr2
*ptr1 < *ptr2

关系表达式的值为0或1,为false或true。如果表达式为true,则表达式将返回值1;如果为false,则它将返回值0。

让我们用下面给出的代码更好地理解指针上的关系表达式:

// Program showing pointer expressions
// during Relational Operations
#include 
int main()
{
    // Initializing integer variables
    int a = 20, b = 10;
  
    // Declaring pointer variables
    int* ptr_a;
    int* ptr_b;
  
    // Initializing pointer variables
    ptr_a = &a;
    ptr_b = &b;
  
    // Performing relational operations
    // less than operator
    if (*ptr_a < *ptr_b) {
        printf(
            "%d is less than %d.", *ptr_a, *ptr_b);
    }
  
    // Greater than operator
    if (*ptr_a > *ptr_b) {
        printf(
            "%d is greater than %d.", *ptr_a, *ptr_b);
    }
  
    // Equal to
    if (*ptr_a == *ptr_b) {
        printf(
            "%d is equal to %d.", *ptr_a, *ptr_b);
    }
  
    return 0;
}
输出:
20 is greater than 10.

输出:

20 is greater than 10.

赋值运算符

分配运算符用于将值分配给标识符。有多种速记操作可用。下表给出了实际的赋值语句及其速记语句。

例子:

*a=10
*b+=20
*z=3.5
*s=4.56743

让我们借助以下代码更好地理解赋值运算符:

// Program showing pointer expressions
// during Assignment Operations
#include 
int main()
{
    // Initializing integer variable
    int a = 30;
  
    // Declaring pointer variable
    int* ptr_a;
  
    // Initializing pointer using
    // assignment operator
    ptr_a = &a;
  
    // Changing the variable's value using
    // assignment operator
    *ptr_a = 50;
  
    // Printing value of 'a' after
    // updating its value
    printf("Value of variable a = %d", *ptr_a);
  
    return 0;
}
输出:
Value of variable a = 50

条件运算符

C中只有一种最常用的条件运算符称为三元运算符。三元运算符首先检查表达式,然后根据其返回值返回true或false,从而触发/选择另一个表达式。

句法:

expression1 ? expression2 : expression3;

例子:

c = (*ptr1 > *ptr2) ? *ptr1 : *ptr2;
  • 如示例所示,假设* ptr1 = 20和* ptr2 = 10,则表达式的条件在此处变为true,因此它将返回真实表达式的值,即* ptr1,因此变量’c’现在将包含值20。
  • 考虑相同的示例,假设* ptr1 = 30和* ptr2 = 50,则表达式的条件为false,因此它将返回假表达式的值,即* ptr2,因此变量’c’现在将包含值50。

让我们通过给定的代码了解概念:

// Program showing pointer expressions
// during Conditional Operations
#include 
int main()
{
    // Initializing integer variables
    int a = 15, b = 20, result = 0;
  
    // Declaring pointer variables
    int *ptr_a, *ptr_b;
  
    // Initializing pointer variables
    ptr_a = &a;
    ptr_b = &b;
  
    // Performing ternary operator
    result = ((*ptr_a > *ptr_b) ? *ptr_a : *ptr_b);
  
    // Printing result of ternary operator
    printf("%d is the greatest.", result);
    return 0;
}
输出:
20 is the greatest.

一元运算符

主要有两个运算符,分别给出如下。

例子:

(*ptr1)++
(*ptr1)--

让我们通过给定的代码了解一元运算运算符的用法:

// Program showing pointer expressions
// during Unary Operations
#include 
int main()
{
    // Initializing integer variable
    int a = 34;
  
    // Declaring pointer variable
    int* ptr_a;
  
    // Initializing pointer variable
    ptr_a = &a;
  
    // Value of a before increment
    printf("Increment:\n");
    printf(
        "Before increment a = %d\n", *ptr_a);
  
    // Unary increment operation
    (*ptr_a)++;
  
    // Value of a after increment
    printf(
        "After increment a = %d", *ptr_a);
  
    // Value before decrement
    printf("\n\nDecrement:\n");
    printf(
        "Before decrement a = %d\n", *ptr_a);
  
    // unary decrement operation
    (*ptr_a)--;
  
    // Value after decrement
    printf("After decrement a=%d", *ptr_a);
  
    return 0;
}
输出:
Increment:
Before increment a = 34
After increment a = 35

Decrement:
Before decrement a = 35
After decrement a=34

按位运算符

二进制运算符也称为按位运算运算符。它用于以位级别操作数据。按位运算符不能用于float和double数据类型。下表显示了所有按位运算运算符:

例子:

*ptr1 & *ptr2
*ptr1 | *ptr2
*ptr1 ^ *ptr2

让我们通过给定的代码了解概念:

// Program showing pointer expressions
// during Bitwise Operations
#include 
int main()
{
    // Declaring integer variable for
    // storing result
    int and, or, ex_or;
  
    // Initializing integer variable
    int a = 1, b = 2;
  
    // Performing bitwise operations
    // AND operation
    and = a & b;
  
    // OR operation
    or = a | b;
  
    // EX-OR operation
    ex_or = a ^ b;
  
    // Printing result of operations
    printf("\na AND b = %d", and);
    printf("\na OR b = %d", or);
    printf("\na Exclusive-OR b = %d", ex_or);
    return 0;
}
输出:
a AND b = 0
a OR b = 3
a Exclusive-OR b = 3
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。