|
一、一维数组
(一)一维数组的创建
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 =#
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;
|