- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章C语言一维数组初步学习笔记由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
数组 。
可以存储一组或者多组数值的变量,里面包含多个元素,数组的每个成员都是一个数组元素.
一维数组 。
定义:类型 数组名[常量表达式] = {值1, 值2, 值3…},
1
2
3
4
|
int
a[3] = {0, 1, 2};
float
f[2] = {1.2, 2.3, 3.14};
char
str[] = {
'h'
,
'e'
,
'l'
,
'l'
,
'o'
};
chat str1 =
"iPhone"
;
//这也是定义字符数组的方法,字符数组后面会详细讲解,这里先了解一下
|
当数组元素个数为变量时,只能声明数组,不能直接赋值:
1
2
3
|
int
length = 4;
int
a[length];
//这样可以
int
a[length] = {2, 4, 6, 8};
//这样的话就会报错
|
注意事项:
1、系统不会检测数组元素的下标是否越界,编程时,必须保证数组下标不能越界.
2、不能这样定义数组 int array[] = {}; //数组个数和初始值不能同时为空 。
3、也不能这样定义数组 int array[2] = {1, 2, 3}; //数组的值的个数大于数组的个数 。
4、数组是一个整体,不能直接参加运算,只能对单个元素进行处理,通常用到数组的地方都会用到循环 。
常见数组操作 如果初始化数组的时候,数组的元素个数确定,那么常量表达式可以不写:
1
|
int
a[] = {1, 3, 5, 7, 9};
//数组的长度为5 相当于int a[5] = {1, 3, 5, 7, 9};
|
int 就是数组类型,表示这个数组中的每个元素都是 int 类型.
访问:通过数组名+下标去访问数组中的元素,而且注意数组的下标是从 0 开始的,a[0] 就是第一个元素,a[1] 代表第二个元素,a[2] 代表第三个元素。所以数组的最后一个元素就是 数组的长度 – 1,一定不要写a[3],这样的话就属于数组越界.
在数组的访问的时候我们通常会通过 for 循环来操作,这个操作一般称为遍历 。
1
2
3
4
5
6
7
8
9
10
11
12
|
int
ages[28];
//循环赋值
for
(
int
i = 0; i < 28; i++)
{
int
age = arc4random() % 13 + 18;
//每个人的年龄的范围是:18 ~ 30 之间的随机值
ages[i] = age;
//给每个元素赋值
}
//访问,也叫遍历
for
(
int
i = 0; i < 28; i++)
{
printf
(
"a[%d] = %d "
, i, ages[i]);
}
|
两个数组的每个元素对应相加,相加的和存放到第三个数组中:
1
2
3
4
5
6
7
8
|
int
a1[] = {2, 4, 5, 6, 10};
int
a2[] = {1, 3, 4, 5, 6};
int
a3[5];
for
(
int
i = 0; i < 5; i++)
{
a3[i] = a1[i] + a2[i];
printf
(
"a3[%d] = %d "
, i, a3[i]);
}
|
输出结果为:
1
|
a3[0] = 3 a3[1] = 7 a3[2] = 9 a3[3] = 11 a3[4] = 16
|
数组的长度如何计算:
sizeof(数组名)/sizeof(数组第一个元素) 。
1
2
3
|
int
arr[] = {2, 3, 4, 6, 7};
int
length =
sizeof
(arr) /
sizeof
(arr[0]);
printf
(
"length = %d\n"
, length);
|
输出结果为:
1
|
length = 5
|
字符数组:用于存放字符变量的数组称为字符数组,有两种定义格式:
1
2
|
char
str[4] = {
'a'
,
'b'
,
'c'
,
'd'
};
char
str2[] =
"iPhone"
;
//另外一种方式
|
字符串的输出:
1
|
printf
(
"str2 = %s\n"
, str2);
//%s 输出字符串,遇到 '\0' 结束
|
有'\0'结束标识的字符数组也称为字符串,系统提供了许多的一些字符串的函数 。
size_t strlen(const char *):计算字符串长度,是字符串的有效长度,不算'\0′ 。
1
2
3
|
char
str[] =
"iPhone"
;
unsigned
long
length =
strlen
(str);
//strlen 表示有效长度
printf
(
"length = %lu\n"
, length);
|
输出结果为:
1
|
length = 6
|
strlen() 的实现原理:就是遍历字符串,当遇到 ‘\0′ 的时候就结束.
char *strcpy(char *, const char *):字符串拷贝 。
1
2
3
|
char
str1[] =
"Unity"
;
char
str2[] =
"Android....."
;
printf
(
"%s\n"
,
strcpy
(str1, str2));
|
输出结果:
1
|
Android
|
char *strcat(char *, const char *):字符串拼接 。
1
2
3
|
char
str1[] =
"Unity"
;
char
str2[] =
" iPhone"
;
printf
(
"%s\n"
,
strcat
(str1, str2));
|
输出结果:
1
|
Unity iPhone
|
int strcmp(const char str1*, const char str2*):字符串比较,并且根据 str1 按照字典顺序小于、等于或大于 str2 的结果分别返回负整数、0或正整数。该返回值是 str1 和 str2 由前向后逐字符比较时遇到的第一个不相等字符处的字符的差值 。
1
2
3
|
char
str1[] =
"Unity"
;
char
str2[] =
"iPhone"
;
printf
(
"%d\n"
,
strcmp
(str1, str2));
|
输出结果:
。
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <stdio.h>
int
main(
int
argc,
char
*argv[])
{
int
score[10]={76,85,90,67,59,79,82,95,91,65};
int
wait, length, i;
length =
sizeof
(score) /
sizeof
(score[0]);
for
(i = 0; i < length; i++)
{
printf
(
"%d \n"
, *(score + i));
}
scanf
(
"%d"
, &wait);
}
|
程序输出:
1
2
3
4
5
6
7
8
9
10
|
76
85
90
67
59
79
82
95
91
65
|
数组下标与指针关系很密切。执行语句 pa = &a[0] 后,pa 和 a 就具有相同的值了,并且 *pa=a[0]。实际上C语言在计算数组下标时也是使用指针来完成的。下标与指针其实是等价的.
当把一个数组名传递给一个函数的时候,实际上传递的是该数组的第一个元素的地址。所以,数组名参数必须是一个指针.
计算字符串长度的程序可以写成以下:
1
2
3
4
5
6
7
8
|
int
strlen
(
char
*s)
{
int
n;
for
(n = 0; *s !=
'\0'
; s++)
n++;
return
n;
}
|
s 是指针,也就是一个变量,对它进行自增是合法的.
最后此篇关于C语言一维数组初步学习笔记的文章就讲到这里了,如果你想了解更多关于C语言一维数组初步学习笔记的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个 Haskell 程序,它用 Metropolis 模拟 Ising 模型 算法。主要操作是一个模板操作,它需要下一个的总和 2D 中的邻居,然后将其与中心元素相乘。那么 元素可能已更新。 在
对于卷积,我想在一个维度上应用圆形填充,在所有其他维度上应用零填充。我该怎么做? 对于卷积,有 28 个 channel ,并且数据在球形箱中描述。半径时间有 20 个箱子,极地时间有 20 个箱子,
假设您有一个数组并想创建另一个数组,该数组的值连续等于第一个数组的 10 个元素的标准差。在 for 循环的帮助下,它可以像下面的代码一样轻松编写。我想要做的是避免使用 for 循环来加快执行时间。有
我有一个长度为size * size的一维数组,表示值的平方字段。 我的目标是将数组旋转到位(previous question)。我目前在获取正确的内圈索引方面遇到问题。我的算法有什么错误? 这是我
stride = 1 和 1 个过滤器的 1D CNN 的输出长度不应该等于输入长度而不需要填充吗? 我认为是这种情况,但创建了一个具有这些规范的 Keras 模型,当输入形状为 (17910,1)
我有一个零散布的一维数组。想创建第二个数组,其中包含最后一个零的位置,如下所示: >>> a = np.array([1, 0, 3, 2, 0, 3, 5, 8, 0, 7, 12]) >>> fo
我试着去理解卡尔曼滤波器是如何工作的,因为多维变量太混乱了,一开始我从一维的例子开始。 我发现有3个不同的来源解释温度计的情况,但所有这些情况实现的方程略有不同,我没有得到重点。 我实现了解决方案2,
我有一个二维数组,我需要将它转换为一个列表(同一对象)。我不想使用 for 或 foreach 循环来执行此操作,它们将获取每个元素并将其添加到列表中。还有其他方法吗? 最佳答案 好吧,你可以让它使用
我正在使用 Keras 构建一个 CNN,将以下 Conv1D 作为我的第一层: cnn.add(Conv1D( filters=512, kernel_size=3, str
在 Python 中使用 TensorFlow,我正在制作一个以一维数组作为输入的神经网络。我想在网络中添加一个卷积层,但似乎无法让它工作。 我的训练数据如下所示: n_samples = 20 le
我有一个简单的一维数组,但我想使用 jQuery 将长列表分成两列。我怎样才能实现这个目标? var articles = ['article10','article9','article8','ar
我有一个刚从文件中读入的 float 的一维 vector 。 std::vector result(s.size() / sizeof(float)); 我想像这样使用这些数据 myTable[rl
使用 numpy 将 data reshape 为 fencepost 的最有效方法是什么? data = np.array([1, 2, 3, 4, 5])
我正在尝试通过删除 for 循环并仅在处理大型数据集时使用 numpy 数组来优化一些代码。 我想采用一维 numpy 数组,例如: a = [1, 2, 3, 4, 5] 并生成一个 2D nump
我正在尝试为两个数组 Pages 和 Price 赋值。 #include int main() { static int pages[3]; static int price[3];
我是深度学习、keras API 和卷积网络的新手,如果这些错误是幼稚的,请事先致歉。我正在尝试构建一个用于分类的简单卷积神经网络。输入数据 X 有 286 个样本,每个样本有 500 个时间点,4
假设我有 Numpy 数组 p 和一个 Scipy 稀疏矩阵 q 这样 >>> p.shape (10,) >>> q.shape (10,100) 我想做 p 和 q 的点积。当我尝试使用 nump
我需要一些行为类似于 std::vector 的东西(界面/功能/等)但我需要它是平坦的,即它不能动态分配缓冲区。显然,这通常不起作用,因为可用大小必须在编译时确定。但我希望类型能够处理N没有额外分配
作为我正在运行的一些模拟的一部分,我需要最终对一些非常长的(实数)数字序列执行以下操作。这是要点: 给定一个长的一维 NumPy 数组,对于数组中的每个位置,我想对该位置前后的值进行平均,取平均值之间
这个问题在这里已经有了答案: Concatenating two one-dimensional NumPy arrays (6 个答案) 关闭 5 年前。 我想将 numpy 数组存储到另一个 n
我是一名优秀的程序员,十分优秀!