吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1505|回复: 7
收起左侧

[学习记录] 学习c语言的第一天:关于数组指针和指向数组指针变量的一些学习

[复制链接]
laiyuou 发表于 2021-11-6 01:54

//#include<stdio.h>
//#define _CRT_SECURE_NO_DEPRECATE
//#define _CRT_SECURE_NO_WARNINGS

//int main()
//{
//  int a = 10, b = 20, s, t, pa, pb;
//  pa = &a;
//  pb = &b;
//  s = pa + pb;
//  t = *pa*pb;
//  printf("a=%d\nb=%d\na+b=%d\n",a,b,a+b,a
b);
//  printf("s=%d,t=%d\n", s, t);
//
//  return 0;
//}

//例子:用指针来判断的输入的数值的大小,并且又大到小输出
//int main()
//{
//  int a, b, c, pmax, pmin;
//  printf("input three numbers:\n");
//  scanf_s("%d%d%d", &a, &b, &c);
//  if (a > b)
//  {
//      pmax = &a;
//      pmin = &b;
//  }
//  else
//  {
//      pmax = &b;
//      pmin = &a;
//  }
//  if (c > pmax) pmax = &c;
//  if (c <
pmin) pmin = &c;
//  printf("max = %d\nmin = %d\n", pmax, pmin);
//
//
//  return 0;
//}

//c语言中规定,数组名代表数组的首地址,也就是0号地址,因此下面两个地址等价
////int a[10];
////int p;
////int
p = &a[0];
////int *p = a;//数组名代表数组的首地址

//例子:输出数组中所用元素(下标法)

//int main()
//{
//  int a[10], i;
//  for (i = 0; i < 10; i++)
//  {
//      a[i] = i;
//  }
//  for (i = 0; i < 10; i++)
//  {
//      printf("a[%d]=%d\n", i, a[i]);
//  }
//  return 0;
//}

//例子:输出数组中全部元素。(通过数组计算元素的地址,找出元素的值)
//int main()
//{
//  int a[10], i;
//  for (i = 0; i < 10; i++)
//  {
//      (a + i) = i;//此时的a就是数组元素的首地址
//  }
//  for (i = 0; i < 10; i++)
//  {
//      printf("a[%d]=%d\n", i,
(a + i));
//  }
//
//
//  return 0;
//}

//int main()
//{
//  int a[10], i, p;
//  p = a;//此时的a就是数组元素的首地址元素
//  for (i = 0; i < 10; i++)
//  {
//      
(p + i) = i;//(自己编写时犯的错误)不要忘记了给指针变量进行赋值
//  }
//  for (i = 0; i < 10; i++)
//  {
//      printf("a[%d] = %d\n", i, *(p + i));
//  }
//
//  return 0;
//}

//例子:
//int main()
//{
//  int a[10], i, p = a;//在第一步就可以把数组元素a首地址元素赋值给指针变量p
//  for (i = 0; i < 10;)
//  {
//      
p = i;
//      printf("a[%d] = %d\n", i++, *p++);//此时的i和p是i++和p++,区别好++i和++p
//  }
//
//  return 0;
//}

//注意几个问题:
//指针变量可以实现本身值的改变。如p++是合法;但是a++是错误的、因为a是数组名,他说数组的首地址,是常量。
//找错误
//int main()
//{
//  int p, i, a[10];
//  p = a;
//  for (i = 0; i < 10; i++)
//  {
//      
p++ = i;//此时给到的是都是变量i地址了
//  }
//  for (i = 0; i < 10; i++)
//  {
//      printf("a[%d] = %d\n", i, p++);
//  }
//  return 0;//虽然定义数组时指定包含10个元素,但是指针变量可以指到数组以后的内存单元,系统并不认为非法。
//}
////改正:
//int main()
//{
//  int
p, i, a[10];
//  p = a;//初始化p指针变量的地址,即赋予指针变量p的一个地址,要不然在134项中因为指针没有初始化无法进行自增。
//  for (i = 0; i < 10; i++)
//  {
//      p++ = i;
//  }
//  p = a;
//  for (i = 0; i < 10; i++)
//  {
//      printf("a[%d] = %d\n", i,
p++);
//  }
//  return 0;
//}
//*p++,由于++和*同优先级,结合方向自右向左,等价于(p++)
//(p++)与(++p)作用不同。若p的初值为a,则(p++) 等价于a[0],(++p)等价于a[1];
//(p)++表示p所指向 元素加1
//如果p当前指向a数组中的第i个元素,则:
//
(p--)相当于a[i--]
//(++p)相当于a[++i]
//
(--p)相当于a[--i]

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

了覅君 发表于 2021-11-6 09:51
加油加油
无闻无问 发表于 2021-11-6 09:58
CCQc 发表于 2021-11-6 10:06
 楼主| laiyuou 发表于 2021-11-6 12:12

因为有一点其他语言的编程啦
wasdzzleyong 发表于 2021-11-14 08:38
一天学这么多佩服
Copycai 发表于 2021-11-15 18:39
学指针交换数值给我的感受就是:指针只是把数据存储的门牌号拿来传递,所以指针可复用,不会改变变量的值。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 07:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表