c语言指针带*和不带*的区别
时间: 2023-11-23 22:06:44 浏览: 200
在C语言中,指针是一个值为内存地址的变量或数据对象。指针变量是用来存储内存地址的变量,而不是存储实际的数据。在声明指针变量时,需要在变量名前加上一个星号(*),这个星号表示这是一个指针变量。而在使用指针变量时,需要使用星号(*)来访问指针所指向的内存地址中存储的数据。因此,带星号的指针变量表示指向某个内存地址的指针,而不带星号的指针变量表示存储某个内存地址的指针。简单来说,带星号的指针变量是指针类型,不带星号的指针变量是整型类型。
相关问题
C语言struct student *creat()表示什么意思
`struct student *creat()` 是一个函数声明,它表示一个返回类型为 `struct student *` 的函数名为 `creat`。在C语言中,函数名后面的括号中可以包含函数的参数列表,但是在这个声明中,括号中没有参数,因此这是一个不带参数的函数声明。
这个函数声明表示 `creat` 函数会返回一个指向 `struct student` 类型的指针。通常情况下,`creat` 函数的作用是创建一个 `struct student` 类型的对象,并返回指向该对象的指针。在函数体内部,可以通过动态内存分配函数(如 `malloc`)来申请一块内存来存储 `struct student` 对象,并初始化该对象的成员变量。
例如,下面的示例代码定义了一个 `struct student` 结构体,然后定义了一个名为 `creat` 的函数,该函数会动态分配内存来创建一个 `struct student` 对象,并返回指向该对象的指针:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
int id;
char name[20];
};
struct student *creat() {
struct student *p = (struct student *) malloc(sizeof(struct student));
p->id = 1001;
strcpy(p->name, "Tom");
return p;
}
int main() {
struct student *s = creat();
printf("ID:%d\n", s->id);
printf("Name:%s\n", s->name);
free(s); // 释放动态分配的内存
return 0;
}
```
程序输出:
```
ID:1001
Name:Tom
```
这里的 `creat` 函数返回了一个指向动态分配的 `struct student` 对象的指针,然后在 `main` 函数中调用该函数,并使用返回的指针访问 `struct student` 对象的成员变量。最后,记得释放动态分配的内存。
c语言去重复带指针高效
要在C语言中高效地去除数组中的重复元素,可以使用指针来实现。以下是一个示例代码:
```c
#include <stdio.h>
void removeDuplicates(int *arr, int *size) {
int i, j, k;
for(i = 0; i < *size; i++) {
for(j = i + 1; j < *size; j++) {
if(arr[i] == arr[j]) {
// 将重复元素后面的元素往前移动
for(k = j; k < *size - 1; k++) {
arr[k] = arr[k + 1];
}
(*size)--; // 数组大小减一
j--; // 因为元素往前移动了,所以需要将内层循环的索引减一
}
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 2, 3, 5, 6, 1};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
removeDuplicates(arr, &size);
printf("\n去重后的数组:");
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在上面的代码中,我们修改了 `removeDuplicates` 函数的参数,将数组大小传递给函数的指针。这样,我们可以在函数中直接修改数组大小,而不需要返回数组大小。
同时,我们在调用 `removeDuplicates` 函数时,使用了 `&size` 来传递数组大小的地址。
这样,就可以在C语言中高效地去除数组中的重复元素了。希望对你有所帮助!如有任何疑问,请随时提问。