【C语言】 数组知识点整理

论坛 期权论坛 脚本     
匿名网站用户   2020-12-19 17:50   11   0

一、一维数组

(一)一维数组的创建

eg:int a [10 ];

int为所创建数组的类型,a为数组名,[ ]内为数组的大小,必须是一个常量或常量表达式且不能为0

(二)一维数组的初始化

以下几种格式均可

int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98, 'c'};  //输出为a,b,c
char arr5[] = {'a','b','c'};   //输出为'a''b''c'     无‘\0’
char arr6[] = "abcdef";  //输出为'a''b''c''d''e''f''\0'而非字符串abcdef
char *p="abcdef"        //*p为指针变量,初始化为字符串,输出“abcdef”

例题:

该程序最终输出'N'

P1、P2指针变量指向同一个常量字符串,所以P1=P2

a1、a2两个数组虽初始化相同的值,但在不同的地址空间,所以a1!=a2

#include<stdio.h>
#include<stdlib.h>
int main()
{
 char a1[] = "abc";
 char a2[] = "abc";
 if (a1 == a2)
 {
  printf("Y");
 }
 char *P1 = "abc";
 char *P2 = "abc";
 if (P1 == P2)
 {
  printf("N");
 }
 printf("\n");
 system("pause");
  return 0;
}

(三)一维数组的指针访问

int*p=a;

*(p+i)=i;

(四)一维数组的理解

&a[i]  ==  arr+i   //表示下标为i的元素地址

*(arr+i) //*解引用,表示下标为i的元素

*arr==*(arr+0)==arr[0]    //表示数组arr的首元素

arr[i]==*(arr +i)   //表示下标为i的元素

arr[i]=i == i[arr]=i  //arr[i],其中arr和i是[]的两个操作数

(五)不同类型指针的区别

eg:
int num =0x11223344;  // 0x十六进制数,一个字节=8bit

int *p =&num;

char *p =(char*)num;

*p=0;

①不同类型的指针解引用权限不同

②字符型指针地址+1,走1个字节;整型指针地址+1,走4个字节

二、二维数组

(一)二维数组的创建

int arr[3][4] //3为二维数组的行数,4为二维数组的列数

注:二维数组的创建行可以不写,列不能不写

(二)二维数组行数和列数的计算

行:i=sizeof(arr)/sizeof(arr[0])

列:j=sizeof(arr[i])/sizeof(arr[i][0])

(三)二维数组的指针访问

eg:

#include <stdio.h>
int main()
{
 int arr[3][4] = {0};
 int *p = &arr[0][0];
 int i = 0;
 for(i=0; i<3*4; i++)
 {
   *(p+i)= i;
 }
 for(i=0; i<3; i++)
 {
   int j = 0;
   for(j=0; j<4; j++)
  {
    printf("%d ", arr[i][j]);
   }
 }
 return 0;

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP