c语言中,设置指针int *p和数组 int a[12],之后在使用中,p=a和p=&a有什么区别
时间: 2023-06-13 19:05:11 浏览: 54
在C语言中,指针和数组是两个不同的概念。指针是一个变量,它存储另一个变量的地址;而数组是一组相同类型的变量,它们在内存中是连续存储的。
设置指针int *p和数组int a[12]的语法分别为:
```c
int *p;
int a[12];
```
将指针p指向数组a的首地址可以使用以下语法:
```c
p = &a[0]; // 或者 p = a;
```
这里使用了数组名a,因为数组名本身就代表了数组的首地址。所以,上面的语句也可以写成p=a。
如果要将整个数组a的内容复制到指针p中,可以使用以下语法:
```c
p = a;
```
这里的p和a都是指向数组首元素的指针。因此,将p指向a的首地址和将p指向a的首元素是等效的。
如果想让指针p指向数组a的第n个元素,可以使用以下语法:
```c
p = &a[n]; // 或者 p = a + n;
```
这里的&a[n]表示数组a中第n个元素的地址,而a+n表示数组a中第n个元素的地址偏移量。两者等效。
如果将p赋值为a,那么p就指向了数组a的首地址。而如果将p赋值为整数值,比如p=3,那么p就指向了内存地址为3的位置,这很可能会导致程序崩溃或者出现意想不到的结果。因此,将指针赋值为不合法的地址是不安全的。
相关问题
c语言中 对于: int a[] = {5, 15, 34, 54, 14, 2, 52, 72}; int *p = &a[5]; 则: p[-2]的值是?
### 回答1:
"int a[] = {5, 15, 34, 54, 14, 2, 52, 72}; int *p =" 这是一段C语言代码,它定义了一个整型数组 "a" 并初始化为八个整数值,同时定义了一个整型指针 "p"。但是没有为 "p" 赋值,因此它的值是未知的。
### 回答2:
int a[] = {5, 15, 34, 54, 14, 2, 52, 72}; int *p = a;
这段代码的含义是定义了一个整型数组a,其中包含了8个元素分别为5、15、34、54、14、2、52和72。然后定义了一个指针变量p,将其指向数组a的首地址。
指针变量p可以通过下标或者指针运算符*来访问数组中的元素。例如,可以通过p[0]、p[1]、p[2]等方式来访问数组a中的元素,这样可以获取到数组中的具体数值。
同时,可以使用指针变量p进行指针运算。比如,p+1将指针p移动到下一个数组元素的地址,即指向数组a的第二个元素15的地址。这样就可以通过*p或者*(p+1)来获取相应的元素值。
总之,这段代码定义了一个整型数组a,并使用指针变量p来访问数组中的元素,以及进行指针运算。通过指针变量p,可以更加灵活地操作数组a。
### 回答3:
&a[0];
*p为a数组的第一个元素的地址,也就是&a[0]的值。也可以表示为*p=&a[0];
所以*p的值为5。
指针p指向了数组a的第一个元素。可以通过*p来访问a数组中的元素。
指针的作用是存储变量的地址。在这个例子中,指针p指向了数组a的第一个元素的地址。通过指针p可以访问到数组a中的元素。
指针和数组有着密切的关系。指针可以用来对数组进行遍历和操作。通过指针可以获取数组中的元素,并且可以通过指针对数组中的元素进行修改。
在这个例子中,通过指针p可以获取到数组a的第一个元素的值5。也可以通过指针p来修改数组a中的元素。例如,*p = 10; 此时数组a的第一个元素就变成了10。
指针还可以通过指针运算来移动指针的位置。例如,p++; 可以将指针p指向数组a的下一个元素的地址。
总结来说,指针在C语言中是非常重要的概念。它可以用来对数组进行遍历和操作,访问和修改数组中的元素,以及通过指针运算来移动指针的位置。指针是C语言中非常强大和灵活的特性之一。
C语言编写一个使用指针的ex函数,交换数组a和数组b中对应元素
可以使用如下代码实现:
```c
void ex(int *a, int *b, int n) {
for (int i = 0; i < n; i++) {
int temp = *(a+i); // 保存a[i]
*(a+i) = *(b+i); // 将b[i]赋值给a[i]
*(b+i) = temp; // 将保存的a[i]赋值给b[i]
}
}
```
其中,`a`和`b`分别是两个整型数组的指针,`n`表示数组的长度。在函数内部,使用循环遍历数组,并使用指针操作交换对应位置的元素。注意,在使用指针操作时,需要使用`*`符号来访问指针所指向的值。