数组和函数:
定义数组时对数组赋予初值:
一维数组:
int array[5]; //未初始化的局部变量是垃圾值
int array[5] = {1, 2, 3, 4, 5};
int array[5] = {1, 2}; //对部分元素初始化,其他未初始化元素为0
int array[] = {1, 2, 3, 4 ,5};
二维数组:
int a[4][3];
int a[4][3] = {1, 2, 3, 4, 5 ,6, 7, 8, 9, 10, 11, 12};
int a[4][3] = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {7, 9, 8}};
int a[4][3] = {1, 2};
int a[4][3] = {{1}, {2, 3}, {3, 4}, {5}};
int a[][3] = {1, 2, 3, 4, 5 ,6, 7, 8, 9, 10, 11, 12};
int a[4][3] = {0};
关于数组地址理解
printf("%p\n", &a[0][0]); //首元素的地址,单位4字节
printf("%p\n", a[0]); //首行首元素地址,单位4字节
printf("%p\n", &a[0]); //首行的地址,单位12字节
printf("%p\n", a); //首行的地址,单位12字节
printf("%p\n", &a); //数组的地址,单位48字节
printf("***********************\n");
printf("%p\n", &a[0][0] + 1);
printf("%p\n", a[0] + 1);
printf("%p\n", &a[0] + 1);
printf("%p\n", a + 1);
printf("%p\n", &a + 1);
%p是取地址,逐个字符的输入和输出,用格式符%c 输入或输出一个字符
用%s格式符输出字串,printf函数中的输出项是字符数组名,不是数组元素名
字节序,大端字节序是由高字节到低字节,小端字节序是由低字节到高字节
未初始化的局部变量是垃圾值
未初始化的全局变量是0
* 取值 去该地址名字存储的值
& 取地址 取改值下的地址
关于syrcat函数,strcpy函数,strcmp函数的应用
#include <stdio.h>
#include <string.h>
int main()
{
/*
char str[20] = "hello";
char ptr[20] = "world";
strcat(str, ptr); //将字符串ptr连接到str后面
printf("%s\n", str);*/
/* char str[20] = "helloworld";
char ptr[20] = "world";
//strcpy(str, ptr); //字符串拷贝函数 把ptr指向的字符串拷贝到str里 包含'\0'
strncpy(str, ptr, 3); //将ptr的前三个字母覆盖到str的前三个字母
printf("%s\n", str);*/
//字符串赋值
/*1、char str[20] = "hello";
2、char str[20];
str[0] = 'h';
str[1] = 'e'
...
3、strcpy(str, "hello");
错误:char str[20];
str = "helloworld";*/
char str[20] = "hello";
char ptr[20] = "world";
if (strcmp(str, ptr) == 0)
{
printf("字符串相等\n");
}
else if (strcmp(str, ptr) > 0)
{
printf("%s 大于 %s\n", str, ptr);
}
else if (strcmp(str, ptr) < 0)
{
printf("%s 小于 %s\n", str, ptr);
}
if (strncmp(str, ptr, 1) < 0) //比较第一个字母的大小
{
printf("%s 小于 %s\n", str, ptr);
}
return 0
}
函数调用:1 通过函数名找到函数的入口地址(函数就是入口地址) 2 给形参分配空间 3 传值 4(八十餐传给形参,)(值传递)4 执行函数体5 返回 6 释放空间(释放栈空间)