C-指针

//格式:变量类型 *变量名
//定义了一个指针变量p
//指针变量只能存储地址
//指针就一个作用:能够根据一个地址值,访问对应的存储空间
//指针变量p前面的int;指针变量p只能指向int类型的数据
int *p;

int a = 90;

//指针变量p指向了变量a
p = &a;

*p = 10;

a = 20;

printf("%d ", *p);
//printf("%d ", a);

return 0;

//利用指针修改
int main()
{
    int a = 90;

    change(&a);

    prinf ("%d ", a);
    
    return 0;
}
void change(int *n)//int *n = &a;
{
    *n = 10;//将10赋给地址&a
}

格式: 变量类型  *变量名

定义一个指针变量p

int *p;

int a = 90;//分配存储空间给a

p里面只能存地址

p = &a;//指针变量p指向了变量a

以上三行代码在内存中

通过指针改变a 的值

*p = 10;

定义变量时的*仅仅是一个象征,没有其他特殊含义

利用指针求两个数的和与差

#include <stdio.h>

int main()
{
    int a = 10;
    int b = 7;
    
    int sum;
    int min;
    
    sum = sumAndMinus(a, b, &cha);
    
    printf ("和是%d, 差是%d
", he, cha);
    return 0;
}

int sumAndMinus(int n1, int n2, int *n3)
{
    *n3 = n1 - n2;
    
    return n1 + n2;//指针作用:使函数返回值可以有多个
}

任何指针都占用8个字节的存储空间

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     // 0000 0000 0000 0000 0000 0000 0000 0010
 6     int i = 2;
 7     // 0000 0001
 8     char c = 1;
 9     
10     int *p;
11     p = &c;
12     
13     printf("c的值是%d
", *p);
14     
15     return 0;
16 }
17 /*输出:
18 c的值是513
19 */
20 //使用 int *p 不是 1 而是 513
21 //原因:int *p 取值赋值时 取赋4个字节内容
22 //   而 char *p 取值赋值时 取赋一个字节内容
23 //所以 指针都为8个字节存储空间,却定义指针类型的原因是,取值赋值相对应的类型的存储空间

 *p地址为(从大到小)0000 0000 0000 0000 0000 0010 0000 0001        int值为513

指针与数组:

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int ages[5] = {10, 9, 8, 67, 56};
 6     int *p;
 7     
 8     p = &ages[0];//指针变量p指向了数组的首元素
 9                  //数组名就是数组的地址,也是数组首元素的地址
10     //p = ages;
11     //p + 1 的地址取决于指针p的类型 p为int p + 1 地址则增加 4
12     /*所以:
13             p + 1 -> &ages[1]
14             p + 2 -> &ages[2]
15             p + i -> &ages[i]
16      */
17     /*
18      用指针 遍历数组:
19      for (int i = 0; i<5; i++)
20     {
21         printf("ages[%d] = %d
", i, *(p+i));
22      }
23     */
24     return 0;
25 }

  

#include <stdio.h>

void change(int array[]);
int main()
{
    int ages[5] = {10, 11, 19, 78, 67};
    
    change(&ages[2]);
    
    return 0;
}

void change(int *array)
{
    printf("%d
", array[2]);
}

//输出结果: 67

指针与字符串:

定义字符串的两种方式 1》利用数组

            char *name = "it";//字符串里面的字符是可以修改的

           2》利用指针

            char *name = "it";//字符串其实是常量字符串,字符不能改

             适用场合: 不需要修改且经常用到

1,常量区

2, 堆

    对象

3, 栈

    存放局部变量

   使用char name[] = "it";为字符创变量

   char *name = "it";为字符串常量//不能改变值

返回指针的函数

 1 #include <stdio.h>
 2 
 3 char *test();
 4 
 5 int main()
 6 {
 7     char *name = test();//将函数的返回值赋值给指针
 8     
 9     printf("name=%s
", name);
10     
11     return 0;
12 }
13 
14 char *test()
15 {
16     return "rose";
17 }

指向指针的函数:

  

 1 #include <stdio.h>
 2 
 3 void test()
 4 {
 5     printf("调用了test函数
")
 6 }
 7 
 8 int main()
 9 {   /*
10      (*p)是固定写法,代表指针变量p将来肯定是指向函数
11      左边void :指针变量p指向的函数没有返回值
12      右边():指针变量p指向的函数没有形参
13      */
14     void (*p)();
15     
16     p = test;//指针变量p指向了test函数
17     
18     (*p)();//利用指针变量简介调用函数
19    
20     test();//直接调用函数
21      p();//简洁写法
22     
23 }
原文地址:https://www.cnblogs.com/IDRI/p/4926267.html